猜数字游戏(C语言)

题目:输入一个随机四位数,你猜这个四位数。
你猜的结果与这个四位数进行比较,如果所在的位和
这个位上的数字都相同,用A表示。如果只是数字相同,
而位置不同,则用B表示。你只有10次机会!如:
随机产生的数字为:4325
你猜的数 提示你
4586-------------1A0B
3524-------------0A4B
.
.
.

直到在10次内产生4A0B,则显示你胜利。

过程分析:

1.首先随机产生四个数(不重复)。如:4325
  1)先产生一个随机数放在数组a[0]中。如:a[0]=4
  2) 再产生一个与第一个不重复的随机数放在a[1]中。如:a[1]=3
  3) 再用与第二步相同的办法产生第三个和第四个数放在a[2],a[3]中,分别不重复。如 a[2]=2,a[3]=5
2.用户输入一个四位数。如:4586
  1)判断,并确定这个四位数没有重复。有重复则给出提示信息
  2)将这个四位数的每一位拆出来放在数组b[4]中。
     千位放在b[0],百位放在b[1],十位b[2],个位b[3].
  3)分别比较这两数组中的值及位置是否相同。并给出提示信息。
    int Acount,Bcount;
    Acount=Bcount=0;
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
         {
           if(a[i]==b[j])
               if(i==j)   Acount++;
                else      Bcount++;
         }

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define MAX 4
int a[MAX];
int b[MAX];
int Acount,Bcount;
void splitNum(int nPut)
{
	a[0]=nPut/1000;
	a[1]=nPut%1000/100;
	a[2]=nPut%100/10;
	a[3]=nPut%10;

}
void judgeRepeat(int a[MAX])
{ 
  int temp=0;
  for(int i=0;i<4;i++)
	for(int j=i+1;j<4;j++)
	{ 
		if(a[i]==a[j])  temp++;
	}
  if(temp)
	printf("提示:你输入的数中有重复!\n");
    
}
void randNumber()
{ 
  int tem[10]={0};
  int a;
  b[0]=rand()%9+1;
  for(int j=1;j<MAX;j++)
  {
   do
   {
     a=rand()%10;
   }while(a==b[j-1]||a==b[j-2]||a==b[j-3]);

   b[j]=a;

  }
  /* 
  b[0]=rand()%9+1;
  b[1]=rand()%10;
  b[2]=rand()%10;
  b[3]=rand()%10; */
 
}
void printRandNum()
{
  printf("随机产生的数为:");
  for(int i=0;i<MAX;i++)
  {
    printf("%d",b[i]);
  }
  printf("\n"); 

}
void compareNum(int a[MAX],int b[MAX])
{
 
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
         {
           if(a[i]==b[j])
               if(i==j)   Acount++;
                else      Bcount++;
         } 
}
int main(int args,char *agrv[])
{  int nPut;
   int count=0;
   char cYN;
   bool age=true;
   bool fail=true;
 srand(time(NULL));
 randNumber();     /*随机产生的一个四位数*/
 while(age&&count<10&&fail)
 {    

      Acount=Bcount=0;
	  printf("请输入一个不重复的四位数:");
	  scanf("%d",&nPut); 
	  count++;
	  splitNum(nPut);
	  judgeRepeat(a);
	  compareNum(a,b);
	  if(Acount==4)
	  { age=false;}
	  printf("%dA%dB\n",Acount,Bcount);
	  printf("想知道这个数吗(Y/N)?  那样你就输了!还是自己努力吧!\n");
	  getchar();
	  cYN=getchar();
	  if(cYN=='Y'||cYN=='y')   fail=false;
 }
 if(count==10)
 {
 
   printf("你输入的次数已经超过了10次!下次再来吧!");
 }
 else if(!fail)
 {
  printRandNum();
  printf("别灰心再来吧!");
 }
  else
   printf("哇!你好厉害哟,赢了!\n接着来吧!\n");
  return 0;
}



  

  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值