猜数字一定要符合要求产生四个随机数不重复A表示位置数字都正确,B表示数字正确位置不正确

一、问题描述: 该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。 二、功能要求: 1.本游戏显示这样的菜单: (1) 随机产生数据 (2) 用户输入数据 (3) 退出游戏 2.游戏成功与否都能返回主菜单 三、算法提示: 1.数据结构:数组 2.用简单的程序设计方法 四、测试数据: 测试数据: 3792 第一次输入: 1234 0A2B 第二次输入: 5678 0A1B 第三次输入: 0867 0A1B 第四次输入: 9786 1A1B 第五次输入: 1794 2A0B 第六次输入: 2793 2A2B 第七次输入: 3792 4A0B 游戏成功!!!

#include< stdio.h> #include<stdlib.h> #include<time.h> #define MANY 4 #define TIME_OUT 8/定义变量及函数/ int a,b,u; void game(); void ab(int answer[],int guess[]); void same(int num[]);/主日录/ void menu() { char choice,ch; do { do { system("cls"); printf("\t\t\t\t简单猜数字\n\n\n\n"); printf("\t\t\t\t1.开始游戏\n\n"); printf("\t\t\t\t2.使用说明\n\n"); printf("\t\t\t\t3.退出游戏\n\n"); printf("\t\t\t请输入(1-3):"); fflush(stdin); choice=getchar(); } while(choice!='1'&&choice!='2'&&choice!='3'); switch(choice) { case'1':

   {
    game(); 
   break;
   }
 case'2':
    {
   system("cls");
   printf("\t\t\t\t欢迎使用本程序\n\n\n");
   printf("游戏说明:输入%d位数字,输入后会有提示XAYB,X表示有几个数字与答案数字相同且位置相同。\n ",MANY);
   printf("Y表示有几位数字与答案数字相同但位置不正确。\n");printf("例如:答案数字是5764,如果输入5481,则会提示1AlB. \n"); 
   printf("祝你愉快! \n\n");
   printf("按任意键返回主目录.....n");
   break;
     }
  case'3':
     {
  printf("硝定要退出吗? (y/n):");
  fflush(stdin);
  ch=getchar();
  if(ch=='y'||ch=='Y')
  exit(0);
  else
     continue;
     }
}

} while(1); }

/游戏部分/ void game() { int guess[MANY],answer[MANY]; int times,i,m,j; time_t t; char wantplay,temp; srand((unsigned)time(&t)); do { /生成MANY个随机数/ do { u=0; for(i=0;i<MANY;i++)guess[i]=rand()%10; same(guess); } while(u); printf("请输入%d位不相同的数:\n" ,MANY); for(times=1;times<=TIME_OUT+1;times++) { /超过限定数次/ if(times==(TIME_OUT+1)) { printf("正确答案是:"); for(m=0;m<MANY;m++); printf("%d",guess[m]); printf("\n猜了%d次都没猜中",TIME_OUT); break; } printf("第%d次:",times);/玩家输入/ fflush(stdin); for(j=0;j<MANY;j++) { temp=getchar(); answer[i]=temp-48; /temp是char型/ } /检查输入有没有重复/ u=0; same(answer); if(u) { printf("你输入的数字有重复,请重新输入\n"); continue; } ab(answer,guess); /判断输入数字正确的个数/ if(a==MANY) { printf("恭喜!你猜对了"); break; } else printf("%dA%dB\n",a,b); }
printf("还想玩吗?(y/n):"); fflush(stdin); wantplay=getchar(); if(wantplay=='y'||wantplay=='Y') { system("cls"); continue; } else menu(); } while(wantplay=='y'||wantplay=='Y'); }

/判断输入的数或生成的数有没有重复的函数/ void same(int num[])

{
    int i,j;
    for(i=0;i<MANY-1;i++)
    for(j=i+1;j<MANY;j++)
    if(num[i]==num[j])
    u=1;
}

/提示XAYB的函数/ void ab(int answer[],int guess[]) { int i,j; a=b=0; for(i=0;i<MANY;i++) for(j=0;j<MANY;j++) if(answer[i]==guess[j]) if(i==j) a++; else b++;

} /主函数/ void main() { menu(); }

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。