#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int correctA(char n[], char guess[]) //判断位置正确的个数
{
int count = 0, i;
for (i = 0; i < 4; i++)
{
if (n[i] == guess[i])
{
count++;
}
}
return count;
}
int correctB(char n[], char guess[]) // 判断数字正确的个数
{
int count = 0, i, j;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j ++)
{
if (guess[j] == n[i])
{
count++;
}
}
}
return count - correctA(n, guess);
}
int play(char n[])
{
char guess[5];
gets(guess);
printf("%dA%dB\n", correctA(n, guess), correctB(n, guess));
if (correctA(n, guess) == 4)
{
printf("You win!\n");
return 1;
}else
{
return 0;
}
}
char* random(char str[])
{
int tag;
do{
tag = 0;
int n;
srand((unsigned)time(NULL));
n = rand() % 8989 + 1000; // 生成在1000-9999之间的随机数
// 拆分
int n1, n2, n3, n4;
n1 = n / 1000;
n2 = n / 100 - n1 * 10;
n3 = n / 10 - n1 * 100 - n2 * 10;
n4 = n % 10;
// 转成字符数组
str[0] = n1 + '0';
str[1] = n2 + '0';
str[2] = n3 + '0';
str[3] = n4 + '0';
str[4] = '\0';
// 判断是否有重复
int i, j;
int recur[10] = {0};
for (i = 0; i < 4; i++)
{
for (j = i; j < 4; j++)
{
if (i != j && str[i] == str[j])
{
tag = 1; // 有重复
printf("[Warning] There are duplicaes of numbers.\n");
break;
}
}
if (tag) break;
}
} while(tag);
return str;
}
int main()
{
char str[5];
char n[5];
strcpy(n, random(str));
int i, count = 0;
puts("<=====Game Start=====>");
printf("The number you guess: ");
while (play(n) != 1)
{
count++;
printf("You still have %d chances.\n", 7 - count);
if (count > 6){
printf("You have no chance. The answer is %s\n", n);
break;
}
}
}