C语言人机猜数问题
由计算机随机产生一个四位整数,请人猜这四位整数是多少。人输入一个四位数后,计算机首先判断其中有几位猜对了,并且对的数字中有几位位置也正确,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机随机产生的四位数是多少为止。
需求:
1.一个判断有几个数字正确的函数
2.一个判断有几个位置正确的函数
3.一个判断输入是否正确的函数
int numRight(int n, int num);
int locationRight(int n, int num);
int getNum();
/*15
由计算机随机产生一个四位整数,请人猜这四位整数
是多少。人输入一个四位数后,计算机首先判断其中
有几位猜对了,并且对的数字中有几位位置也正确,
将结果显示出来,给人以提示,请人再猜,直到人猜
出计算机随机产生的四位数是多少为止。
*/
void mycode_15()
{
srand((unsigned)time(NULL));
int num, n, A = 0, B = 0;
num = (rand() % 9000) + 1000;
while ((A != 4) || (B != 4))
{
n = getNum();
A = numRight(n, num);
B = locationRight(n, num);
printf("%d %dA%dB\n", n, A, B);
if (n == num)
break;
}
printf("\n\n答对了,答案是:%d", num);
}
int numRight(int n,int num)
{
int count = 0;
char numarray[5];
char narray[5];
bool fuck;
_itoa_s(num, numarray, 10);
_itoa_s(n, narray, 10);
fuck = false;
for (int i = 0; i < 4; i++)
{
//后面的数字跟前面的数字比较,一样的话就不用循环跟答案数组对比
for (int o = 0; o < i;o++)
if (narray[i] == narray[o])
{
fuck = true;
break;
}
//输入数组跟答案数组用穷举法进行比较,一样加一
for (int j = 0; j < 4; j++)
{
if (fuck)
break;
if (narray[i] == numarray[j])
{
count++;
break;
}
}
fuck = false;
}
return count;
}
int locationRight(int n,int num)
{
int count = 0;
char numarray[5];
char narray[5];
_itoa_s(num, numarray, 10);
_itoa_s(n, narray, 10);
for (int i = 0; i < 4;i++)
if (narray[i] == numarray[i])
count++;
return count;
}
int getNum()
{
int num;
printf("请输入数字(4位数):");
while ((scanf_s("%d", &num)) != 1 || (num<1000 || num>9999))
{
printf("请输入数字(4位数):");
while (getchar() != '\n')
continue;
}
return num;
}