📄 36choose7dlg.cpp
字号:
// 36choose7Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "36choose7.h"
#include "36choose7Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMy36choose7Dlg dialog
CMy36choose7Dlg::CMy36choose7Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CMy36choose7Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMy36choose7Dlg)
m_num1 = 0;
m_num2 = 0;
m_num3 = 0;
m_num4 = 0;
m_num5 = 0;
m_num6 = 0;
m_num7 = 0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMy36choose7Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMy36choose7Dlg)
DDX_Text(pDX, IDC_EDIT1, m_num1);
DDX_Text(pDX, IDC_EDIT2, m_num2);
DDX_Text(pDX, IDC_EDIT3, m_num3);
DDX_Text(pDX, IDC_EDIT4, m_num4);
DDX_Text(pDX, IDC_EDIT5, m_num5);
DDX_Text(pDX, IDC_EDIT6, m_num6);
DDX_Text(pDX, IDC_EDIT7, m_num7);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMy36choose7Dlg, CDialog)
//{{AFX_MSG_MAP(CMy36choose7Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDOK, Onclear)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMy36choose7Dlg message handlers
BOOL CMy36choose7Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CMy36choose7Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMy36choose7Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMy36choose7Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
/* 算法1,步骤如下:
1.将36个数放到一个数组pnum[]中;
2.随机产生一个0-35之间的数作为下标,然后判断下标为此数的元素是否被选用过:
(1)若没有被选过,则将该数选出,并将原数组pnum[]中的相应位置置为0;
(2)若被选过,则重新生成一个随机下标,判断下标为此数的元素是否被选用,直到选出适合的数字为止。
3.重复第2步,直到选出7个数为止。
4.对选出的7个数按从小到大的顺序排序。
*/
void CMy36choose7Dlg::OnButton1()
{
int temp,pnum[36],num[7]; //临时变量,临时数组
for(int i=0;i<36;i++) //共有36个数组元素
pnum[i]=i+1;
//***选号***//
srand( (unsigned)time( NULL ));
for(i=0;i<7;i++)
{
temp=rand();
temp=temp%36+1; //得到一个1-36的数
while(pnum[temp]==0)//如果此元素以被选过则重选
{
//srand( (unsigned)time( NULL ));
temp=rand();
temp=temp%36+1;
}
num[i]=temp; //选定一个号码
pnum[temp]=0; //给该元素置0,表示已被选过,如再有视为无效。
}
//***排序***//
for(int chance=1;chance<7;chance++)
{
int position=chance; //元素排序用到的游标
for(i=0;i<7;i++){
if(num[position]<num[i]) //如果后面的元素大于前面的,就交换位置
{
temp=num[position];
num[position]=num[i];
num[i]=temp;
}
}
}
//***显示***//
m_num1=num[0];
m_num2=num[1];
m_num3=num[2];
m_num4=num[3];
m_num5=num[4];
m_num6=num[5];
m_num7=num[6];
UpdateData(FALSE); //通过变量刷新Edit控件的显示
}
/* 算法2,步骤如下:
1.随机产生一个1-36之间的数字,判断其是否被选过:
(1)若没被选过,则将该数选出,并赋给数组num[]中;
(2)若被选过,则重新生成一个随机数。
2.重复第1步,直到选出7个数为止。
3.对选出的7个数按从小到大的顺序排序。
*/
void CMy36choose7Dlg::OnButton2()
{
int temp,num[7]; //临时变量,临时数组
//***选号***//
srand( (unsigned)time( NULL ));
for(int i=0;i<7;i++)
{
temp=rand();
temp=temp%36+1; //得到一个1-36的数
int j=0;
for(;j<i;j++)
{
if(temp==num[j])
{
temp=rand();
temp=temp%36+1;
j=0;
}
}
num[i]=temp; //选定一个号码
}
//***排序***//
for(int chance=1;chance<7;chance++)
{
int position=chance; //元素排序用到的游标
for(i=0;i<7;i++){
if(num[position]<num[i]) //如果后面的元素小于前面的,就交换位置
{
temp=num[position];
num[position]=num[i];
num[i]=temp;
}
}
}
//***显示***//
m_num1=num[0];
m_num2=num[1];
m_num3=num[2];
m_num4=num[3];
m_num5=num[4];
m_num6=num[5];
m_num7=num[6];
UpdateData(FALSE); //通过变量刷新Edit控件的显示
}
/* 算法3,步骤如下:
1.将36个数放到一个数组pnum[]中;
2.打乱数组中的元素;
3.选出前7个数,按从小到大的顺序排序。*/
void CMy36choose7Dlg::OnButton3()
{
int temp,pnum[36],num[7]; //临时变量,临时数组
int i;
int p1;
int p2;
for(i=0;i<36;i++) //共有36个数组元素
pnum[i]=i+1;
//交换50次随机抽取的两个数,用以打乱数组中的元素
srand((unsigned)time(NULL));
for(i=0;i<50;i++){
p1 = rand();
p1 = p1%36+1;
p2 = rand();
p2 = p2%36+1;
temp = pnum[p1];
pnum[p1] = pnum[p2];
pnum[p2] = temp;
}
//***选号***//
for(i=0;i<7;i++){
num[i] = pnum[i];
}
//***排序***//
for(int chance=1;chance<7;chance++)
{
int position=chance; //元素排序用到的游标
for(i=0;i<7;i++){
if(num[position]<num[i]) //如果后面的元素小于前面的,就交换位置
{
temp=num[position];
num[position]=num[i];
num[i]=temp;
}
}
}
//***显示***//
m_num1=num[0];
m_num2=num[1];
m_num3=num[2];
m_num4=num[3];
m_num5=num[4];
m_num6=num[5];
m_num7=num[6];
UpdateData(FALSE);
}
/* 算法4,步骤如下:
1.将1-36个数存入一个6行6列的矩阵数组中;
2.随机产生2个0-5之间的数字,作为下标来确定一个元素,判断其是否被选过:
(1)若没被选过,则将该数选出,并赋给数组num[]中;
(2)若被选过,则重新生成一个随机数。
3.重复第2步,直到选出7个数为止。
4.对选出的7个数按从小到大的顺序排序。*/
void CMy36choose7Dlg::OnButton4()
{
int temp,pnum[6][6],num[7]; //临时变量,临时数组
int i,j;
int p1;
int p2;
int k=1;
for(i=0;i<6;i++) //在6行6列的矩阵中产生有36个元素
for(j=0;j<6;j++)
{
pnum[i][j]=(k);
k++;
}
//随机抽取的两个数p1和p2,作为下标来惟一确定一个数
srand((unsigned)time(NULL));
for(i=0;i<7;i++)
{
p1 = rand();
p1 = p1%6;//得到一个0-5的数
p2 = rand();
p2 = p2%6;
temp=pnum[p1][p2]; //得到一个1-36的数
j=0;
for(;j<i;j++)
{
if(temp==num[j])
{
temp=rand();
temp=temp%36+1;
j=0;
}
}
num[i]=temp; //选定一个号码
}
//***排序***//
for(int chance=1;chance<7;chance++)
{
int position=chance; //元素排序用到的游标
for(i=0;i<7;i++){
if(num[position]<num[i]) //如果后面的元素小于前面的,就交换位置
{
temp=num[position];
num[position]=num[i];
num[i]=temp;
}
}
}
//***显示***//
m_num1=num[0];
m_num2=num[1];
m_num3=num[2];
m_num4=num[3];
m_num5=num[4];
m_num6=num[5];
m_num7=num[6];
UpdateData(FALSE);
}
/* 算法5,说明:因该算法生成的数字为奇偶交错的数字,所以其最后没有被排序,否则会打乱其奇偶性!
步骤如下:
1.随机产生一个1-36之间的数字,记录其奇偶性;
2.随机产生一个1-36之间的数字,判断其奇偶性:
(1)若其与上一个数的奇偶性相同;则放弃该数,重新选取一个随机数;
(2)若其与上一个数的奇偶性不同,则判断其是否与之前选取用的数字重复:若重复则重新选取一个随机数,不重复就选用这个数字;
3.重复第2步,产生其余6个数字;*/
void CMy36choose7Dlg::OnButton5()
{
int temp,num[7]; //临时变量,临时数组
int flag=0;//设置一个标记,flag为0表示偶数,为1表示奇数
//***选号***//
srand( (unsigned)time( NULL ));
temp=rand();
temp=temp%36+1;
if(temp%2!=0)
flag=1;
num[0]=temp;//得到一个1-36的数
int i=1;
while(i<7)
{
temp=rand();
temp=temp%36+1; //得到一个1-36的数
while(temp%2!=flag)
{
int j=0;
for(;j<i;j++)
{
if(temp==num[j])
{
temp=rand();
temp=temp%36+1;
j=0;
}
}
if(flag!=temp%2)
{
num[i]=temp;//选定一个号码
i++;
flag=temp%2;
}
}
}
//***显示***//
m_num1=num[0];
m_num2=num[1];
m_num3=num[2];
m_num4=num[3];
m_num5=num[4];
m_num6=num[5];
m_num7=num[6];
UpdateData(FALSE); //通过变量刷新Edit控件的显示
}
/* 算法6,说明:因该算法生成的数字为奇偶交错的数字,所以其最后没有被排序,否则会打乱其奇偶性!
步骤如下:
1.将1-36个数存入一个数组中;
2.随机产生1个18-24之间的数字,把其作为选中的7个数字中的一个,并将其作为标准,把数组划成两个部分;(因为18-24之间的数字比较居中,作为标准比较均匀)
3.然后随机选则标准左侧的一个数,将其与标准右侧的一个数进行交换;(标准右侧数字的选择规则:35-左侧数字的下标所得的结果,为右侧数字的下标)
4.重复第3步100次,以打乱数组的顺序;
5.从标准左右两侧各依次随机选取3个数字,即可。
*/
void CMy36choose7Dlg::OnButton6()
{
int temp,num[7],i,p,t,pnum[36];
for(i=0;i<36;i++){
pnum[i] = i + 1;
}
srand((unsigned)time(NULL));
do{
temp = rand()%24+1;
}while(temp<18);
num[0] = temp;
p = temp;
for(i=0;i<100;i++)
{
temp = rand()%p;
t = pnum[temp];
pnum[temp] = pnum[35-temp];
pnum[35-temp] = t;
}
num[1] = pnum[0];
num[2] = pnum[1];
num[3] = pnum[2];
num[4] = pnum[p+4];
num[5] = pnum[p+5];
num[6] = pnum[p+6];
//***排序***//
for(int chance=1;chance<7;chance++)
{
int position=chance; //元素排序用到的游标
for(i=0;i<7;i++){
if(num[position]<num[i]) //如果后面的元素小于前面的,就交换位置
{
temp=num[position];
num[position]=num[i];
num[i]=temp;
}
}
}
//***显示***//
m_num1=num[0];
m_num2=num[1];
m_num3=num[2];
m_num4=num[3];
m_num5=num[4];
m_num6=num[5];
m_num7=num[6];
UpdateData(FALSE);
}
void CMy36choose7Dlg::Onclear()
{
m_num1=0;
m_num2=0;
m_num3=0;
m_num4=0;
m_num5=0;
m_num6=0;
m_num7=0;
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -