用c语言分离四位数4586,猜数字游戏(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

#include

#include

#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

{

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

{

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;

}

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值