本人不才,编写的程序太简单,不符合要求,希望大神做一个复杂的,问题是:计算机“想”一个四位数,请人猜这个四位数是多少。人输入这个四位数后,计算机首先判断这四个数中有几个猜对了,并且在猜对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜 ,直到人猜出计算机所想的四位数为止。请编程实现该游戏,游戏结束时,显示人猜一个数用了几次。
4位数先随机生成,存放在数组中,然后根据输入的数据先判断正确的数字,再判断位置
可以帮你写一下,不过先采纳一下,等下写完不采纳要哭了,
#include<stdio.h>
#include <stdlib.h>
#include <time.h> //用到了time函数
int main(void)
{
//存储元数据的数组
int a[4];
//以时间为种调用rand()函数生成随机数并赋值
srand((unsigned) time(NULL));
for (int i=0;i<4;i++) {
a[i]=rand()%9;
// printf("%d",a[i]);//输出生成的随机数,测试用
}
printf("请开始猜吧\n");
//存储输入数据的数组
int b[4];
//猜测字数的计数器
static int count=0;
for(int j=0;j<4;j++){
scanf("%d",&b[j]);
}
count+=1;
//while循环控制变量,控制跳出循环
int control=1;
while(control){
int c=0;
//是否全部猜对检测
for(int i=0;i<4;i++){
if(a[i]==b[i]){
c+=1;
printf("第%d个数猜对了,其值为%d\n",i+1,a[i]);
}
if(c==4){
printf("恭喜你猜对了,你总共猜了%d次",count);
//直接跳出外层循环
control=0;
}
}
//检测数组b中的数是否为猜测数组中有的数
for(int k1=0;k1<4;k1++){
for(int i=0;i<4;i++){
if(i==k1){
continue;
}
if(b[k1]==a[i]){
printf("%d是其中的数\n",b[k1]);
}
}
}
//猜测不成功再猜
for(int j=0;j<4;j++){
scanf("%d",&b[j]);
}count+=1;
}
return 0;
}
测试图
第十一行a[i]=rand()%9;
取余时,rand()%改变后面的数字就可以调整随机数的范围,加大难度
1、人机猜数游戏
由计算机“想”一个四位数,请人猜这个四位数是多少。人输入这个四位数后,计算机首先判断这四个数中有几个猜对了,并且在猜对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜 ,直到人猜出计算机所想的四位数为止。请编程实现该游戏,游戏结束时,显示人猜一个数用了几次。
提示:用库函数random()产生一个随机数。
//没想到什么简单方法,就用笨方法做吧。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int m,x;
/* 用0调用时间函数time(),将其返回值强制转换为unsigned型,作为参数来调用srand( )函数。
srand( )是为rand( )函数初始化随机发生器的启动状态,以产生伪随机数,所以常把srand( )称
为种子函数。用time()返回的时间值做种子的原因是time()返回的是实时时间值,
每时毎刻都在变化,这样产生的伪随机数就有以假乱真的效果。 */
srand((unsigned)time(0));
m=rand()%10000+1; //产生一个随机数。
printf("随机发生器随机一个四位数\n");
printf("%d\n",m); //输入一个四位数m。
printf("****************************\n");
int a[4],b[4]; //a[4]数组存放m的每一位。
a[0]=m%10;
a[1]=m/10%10;
a[2]=m/100%10;
a[3]=m/1000;
int i,k,t;
for(t=0;;t++)
{
int c[4]={1,1,1,1};
printf("您猜的四位数是:\n");
scanf("%d",&x); //输入要猜的四位数x。
b[0]=x%10; //b[4]数组存放x的每一位。
b[1]=x/10%10;
b[2]=x/100%10;
b[3]=x/1000;
int count,j;
/*************判断相同的数的个数**********/
for(i=0,count=0; i<=3; i++)
{
for(j=0; j<=3; j++)
{
if(b[j]==a[i]&&c[j])
{
count++;
c[j]=0;
break;
}
}
}
printf("%d ",count); //count指相同的数的个数。
/*************判断相同位置的数的个数**********/
for(i=0,k=0; i<=3; i++)
{ //k指相同位置上的一致的数的个数
if(a[i]==b[i])
k++;
}
printf("%d\n",k); //k为位置相同的数。
if(k==4)
{
printf("恭喜您!!!结果正确!!\n");
printf("****************************");
break;
} //k为4时,猜对了。
}
return 0;
}
/* rand(产生随机数)
相关函数 srand()
表头文件 #include<stdlib.h>
定义函数 int rand(void)
函数说明 rand()会返回一随机数值,范围在0至RAND_MAX 间。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子。
如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
关于随机数种子请参考srand()。 */
这有一个复杂点的,