猜数游戏c语言

猜数游戏c语言,第1张

#include<stdio.h>

#include<stdlib.h>//随机数生成函数srand()与rand() 所需的头文件

#include<time.h> //time()所需的头文件

int main()

{

int sysdata//系统生成的数据

int n//所猜的数据

int sum = 0//记录猜的次逗慧数

srand((unsigned)time(NULL))//随机数发生器初始化函数,以时间为种子

sysdata = rand()%100+1//随机生成1到100的随机数

printf("退出程序请按:ctrl + c!\n")

while(1)

{

printf("请输入你猜的数据(1-100): ")

if(scanf("%d",&n) != 1) //用于判断用户是否结束游戏

{

break //跳出while循环,结束游戏

}

sum++//每输入一次数据,猜的次数加1

if(sum == 10) // 当猜的次数大于10次的时候重新生成新的随机数

{

if(n == sysdata) //最后一次猜数正确,输出结果,结束游戏

{

printf("猜数正确,总共猜了%d次!\n",sum)

break//跳出while循环,结束游戏橘指液

}

else //最后一次猜数不正确则重圆物新开始游戏

{

printf("猜数次数超过%d次,重新开始游戏!\n",sum)

sysdata = rand()%100+1//随机生成1到100的随机数

sum = 0

}

}

else

{

if(n == sysdata)

{

printf("猜数正确,总共猜了%d次!\n",sum)//猜数正确,结束游戏

break //跳出while循环,结束游戏

}

else if(n >sysdata)

{

printf("你猜的数据太大!\n")

}

else

{

printf("你猜的数据太小!\n")

}

}

}

printf("猜数游戏结束!\n")

return 0

}

测试结果:

退出程序请按:ctrl + c!

请输入你猜的数据(1-100): 50

你猜的数据太小!

请输入你猜的数据(1-100): 75

你猜的数据太小!

请输入你猜的数据(1-100): 85

你猜的数据太大!

请输入你猜的数据(1-100): 80

你猜的数据太小!

请输入你猜的数据(1-100): 82

你猜的数据太小!

请输入你猜的数据(1-100): 84

猜数正确,总共猜了6次!

猜数游戏结束!

Press any key to continue

数据的规律是按照二进制的方式

比裂大如1 是00001,所以1就只在第一行出现了

比如3 是00011 所以3就只在第一行第二行出现

比如63是11111 所以每一行都有63

再比如15 是01111 所以前四行都有15

所以最终的值就是2的n-1相加(即2进制所表示的十进制数)

比如第1行 第2行 第3行,那么最终的值并源碰就是 2的0次方+2的1次方绝谈+2的2次方即7

看看满足你的要求不?

#include"stdio.h"

#include"stdlib.h"

#include"time.h"

int A=0,B=0

int pd(int a[])/*判断是否有相同位慧乎相等与否*/

{int i,j,leap=1

for(i=0i<3i++)

for(j=i+1j<4j++)

if(a[i]==a[j])

leap=0

return leap

}

int sl(int a)/*判断输入的数字是否合法*/

{int b=0,leap=0,dl[4]

if(a>=1000&&a<=9999)

{dl[0]=a/1000

dl[1]=a%1000/100

dl[2]=a%100/10

dl[3]=a%10

b=pd(dl)/*判断四位数的合法性*/

}

if(b==1)

leap=1

return leap

}

void chuli(int a[],int b[])/*判断猜测情况*/

{int i,j

for(i=0i<4i++)

if(a[i]==b[i])

B++

for(i=0i<4i++)

for(j=i+1j<4j++)

if(a[i]==b[j])

A++

printf("%dA%dB\n",A,B)

}

void main()

{int a[4],b[4],k,m,z,i=0,c

printf("这是一个猜数字的游戏,根据系统提示猜其中B前面的数字表示数字正确而且位置正确的数的个数,而A前的数字表示数字正确而位置不对的数的个数,(注意:正确的数字是每一位都不重复的四位数)祝你好前伍悉运~~\n")

while(1)

{srand((unsigned)time(NULL))

z=(rand()%100)*(rand()%100)

if(sl(z))

{k=z

break

}

}

a[0]=k/1000

a[1]=k%1000/100

a[2]=k%100/10

a[3]=k%10

while(1)

{printf("输入你猜的数字:\n")

scanf("%d",&m)

b[0]=m/1000

b[1]=m%1000/100

b[2]=m%100/10

b[3]=m%10

chuli(a,b)

if(i==8)

{printf("大婶啊橘差,你都错了8次了,还要猜吗?(1:yes,2:no)\n")

scanf("%d",&c)

if(c==2)

break

}

else if(i==15)

printf("正确答案:%d\n",k)

else if(B==4)

{printf("恭喜你答对了O(∩_∩)O\n")

break

}

else

printf("猜的不正确,还差点,加油啊!\n")

A=0B=0

i++

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12292643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存