#include
#include
#include
#define debugmode
#define A(X) ArrayOperating(X,'a')
#define B(X) ArrayOperating(X,'b')
#define SWITCH(X,Y) switch(ch) {case 'a': return X; case 'b': return Y;}
int a1,a2,a3,a4;
int b1,b2,b3,b4;
/* function 5 ArrayOperating */
int ArrayOperating(int i,char ch)
{
switch(i)
{
case 1:
SWITCH(a1,b1);
break;
case 2:
SWITCH(a2,b2);
break;
case 3:
SWITCH(a3,b3);
break;
case 4:
SWITCH(a4,b4);
break;
}
return -1;
}
void MakeDigit();
int InputGuess();
int IsRightPosition();
int IsRightDigit();
void main()
{
int count;
int rightDigit;
int rightPosition;
int level;
MakeDigit();
//#ifdef debugmode
//printf("正确数字为:%d%d%d%d\n",a1,a2,a3,a4);
//#endif
printf("输入猜数字的次数:");
scanf("%d",&level);
count=1;
do{
printf("\n第%d次,共%d次\n",count,level);
printf("请输入4个不同的数字(例如,2 3 5 1):\n");
/*input guess*/
if(InputGuess()==0)
{
continue;
}
count++;
rightPosition=IsRightPosition();
rightDigit=IsRightDigit();
rightDigit=rightDigit-rightPosition;
printf("%dA%dB",rightPosition,rightDigit);
printf("(A表示位置和数值都正确,B表示数字正确,位置不正确)\n");
printf("例:0A2B:表示有零个位置和数字都正确,有二个数字是正确的\n");
}
while(count<=level&&rightPosition!=4);
if(rightPosition==4)
{
printf("恭喜您,您在第一%d次猜中了!\n",--count);
}
else
{
printf("对不起,猜数字的次数已到,您失败了,下次再努力!\n");
}
printf("正确的数字为:%d%d%d%d\n",a1,a2,a3,a4);
}
void MakeDigit()//产生0~9的随机数
{
int k;
srand(time(NULL));
k=rand()%10;a1=k;
while(a1==k) k=rand()%10;a2=k;
while(a1==k||a2==k) k=rand()%10;a3=k;
while(a1==k||a2==k||a3==k) k=rand()%10;a4=k;
}
int InputGuess()
{
static int InputGuess0_n;
int ret=1;
ret=scanf("%d%d%d%d",&b1,&b2,&b3,&b4);
if (!ret)
{
printf("输入数字无效!!!\n");
fflush(stdin);
return 0;
}
if(b1==b2||b1==b3||b1==b4||b2==b3||b2==b4||b3==b4)
{
++InputGuess0_n;
printf("输入数字要求不同,请重新输入(输入错误%d次)\n",InputGuess0_n);
return 0;
}
else
{
return 1;
}
}
int IsRightPosition()
{
int rightPosition=0;
int j;
for(j=1;j<=4;j++)
{
if(B(j)==A(j))
{
rightPosition=rightPosition+1;
}
}
return rightPosition;
}
int IsRightDigit()
{
int rightDight=0;
int j,k;
for(j=1;j<=4;j++)
{
for(k=1;k<=4;k++)
{
if(B(j)==A(k))
{
rightDight=rightDight+1;
}
}
}
return rightDight;
}
这个是我昨天刚帮人改过的,加了一些注释,仅作参考。
MFC不算难,自己去弄吧。其实有现成的,百度去吧