许多那些初学C语言的朋友,学习过程中是不是枯燥无味呢!
今天我们就来教大家用控制台做一个简单的人机猜数的小游戏!
第一步:我们来分析一下这个小游戏的具体思路吧,首先我们是要猜的话肯定是让计算机来给我们生成一个随机的数字啦,当然这个数字的范围使我们自己可以随便定义的!然后我们根据计算机的提示我们是猜对了几位数字和猜对的位置有几个 从而猜到真正的答案!
第二步:我们来分析下具体的算法:
1.产生一个随机的四位数,可以产生4个随机数(a数组存放4个数)拼接成一个完整的四位数
2.从键盘输入进行提示:
1)有几个数字正确,将输入的四位数拆分成一个数组b,分别对每位数字实现查找算法。
2)判断位置是否正确,挨个比较数组元素是否相等。
3)循环执行键盘输入操作,直到位置操作的数等于4代表猜正确,循环结束,统计其猜的次数。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//在数组a中查找x是否存在,其中a数组的长度为n,如果存在,返回其下标,不存在,返回-1.
int find(int a[],int n,int x)
{
int i;
for(i=0;i<n;i++)
if(x==a[i])
return i; //找到返回下标
return -1;
}
//判断两个长度相同的数组有几个元素是相等的,函数返回相同位置数据相等的个数。
int compare(int a[],int b[],int n)
{
int i;
int count=0;
for(i=0;i<n;i++)
if(a[i]==b[i]) //相同位置的元素相等,则count++
count++;
return count;
}
main()
{
int a[4]; /*计算机随机产生的四个随机数,每个随机数代表完整四位数中的一位,其中a[0]代表千位(不能为0),a[1],a[2],a[3]分别是百位,十位,个位*/
int b[4]={-1};//用来存放用户猜的四位数,将四位数拆分成4个数,将来用于比较。
int i,guess;
int count1=0,count2=0;
//执行第一步,产生随机数
srand((unsigned)time(NULL));
a[0]=rand()%9+1; //a[0]的随机数介于1-9
for(i=0;i<4;i++)
{
a[i]=rand()%10; //百、十、个位随机数介于0-9
while(find(a,i,a[i])>=0)//判断产生的随机数是否重复,只要重复,重新生成新的数。
a[i]=rand()%10;
//printf("%d",a[i]); //此处去掉注释可查看答案哦!
}
while(compare(a,b,4)!=4)//当位置正确的数不等于4,代表没有猜对,循环输入数据
{
printf("请输入你猜的数据:");
scanf("%d",&guess);
//将其拆分成数组元素b
b[0]=guess/1000;
b[1]=guess/100%10;
b[2]=guess/10%10;
b[3]=guess%10;
//给出提示1:有几个数字猜对了,分别在a数组中查找每个元素b是否存在
count1=0;
for(i=0;i<=3;i++)
if(find(a,4,b[i])>=0) //如果返回下标大于0,代表查找到该元素,则统计数量加一
count1++;
count2=compare(a,b,4);
printf("有%d个数字猜对了\t有%d个位置猜对了\n",count1,count2);
}
printf("恭喜你终于猜到了\n");
}
