#include<stdio.h>
#include<ctype.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
void make4digits(int x[])
{
int i, j, val;
for( i = 0; i < 4; i++){
do{
val = rand() % 10;
for( j = 0; j < i; j++)
if( val == x[j])
break;
}while( j < i);
x[i] = val;
}
}
int check(const char s[])
{
int i, j;
if( strlen(s) != 4)
return 1;
for( i = 0; i < 4; i++){
if( !isdigit( s[i] ))
return 2;
for( j = 0; j < i; j++)
if( s[i] == s[j] )
return 3;
}
return 0;
}
void judge(const char s[], const int no[], int* hit, int* blow)
{
int i, j;
*hit = *blow = 0;
for( i = 0; i < 4; i++){
for( j = 0; j < 4; j++){
if( s[i] == '0' + no[j])
if( i == j)
(*hit)++;
else
(*blow)++;
}
}
}
void print_result(int sum, int spos)
{
if( spos == 4)
printf("回答正确!!");
else if( sum == 0)
printf(" 这些数字里没有答案数字。\n");
else{
printf(" 这些数字里包括%d个答案数字。\n", sum);
if( spos == 0)
printf(" 但是数字的位置都不一致。\n");
else
printf(" 其中有%d个数字的位置是一致的。\n", spos);
}
putchar('\n');
}
int main(void)
{
int try_no = 0;
int chk;
int hit;
int blow;
int no[4];
char buff[10];
clock_t start, end;
srand(time(NULL));
puts(" 来玩珠玑妙算吧。");
puts(" 猜猜4个数字。");
puts(" 其中不包含相同数字。");
puts(" 请像4307这样输入数字。");
puts(" 不能输入空格字符。");
make4digits(no);
start = clock();
do{
do{
printf("请输入:");
scanf("%s", buff);
chk = check(buff);
switch(chk){
case 1 : puts("\a请确保输入四个字符。"); break;
case 2 : puts("\a请不要输入除了数字以外的字符。"); break;
case 3 : puts("\a请不要输入相同的数字。"); break;
}
}while( chk != 0);
try_no++;
judge(buff, no, &hit, &blow);
print_result(hit + blow, hit);
}while( hit < 4);
end = clock();
printf("用了%d次。\n用时%.1f秒。\n", try_no, (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
***话不都说代码直接奉上***