求、 各位 哥哥姐姐;小弟在此 跪求 一 用C语言编写的文曲星猜数字游戏代码。
求、各位哥哥姐姐;小弟在此跪求一用C语言编写的文曲星猜数字游戏代码。是需要带记录分数的,如果有上一个记录的能提示出来。谢谢~~...
求、 各位 哥哥姐姐;
小弟在此 跪求
一 用C语言编写的文曲星猜数字游戏代码。
是需要带记录分数的 ,如果有上一个记录的 能提示出来。
谢谢~~ 展开
小弟在此 跪求
一 用C语言编写的文曲星猜数字游戏代码。
是需要带记录分数的 ,如果有上一个记录的 能提示出来。
谢谢~~ 展开
3个回答
展开全部
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
#include <time.h>
void MakeDigit(int a[],int n);
int InputGuess(int b[],int n,int number);
int IsRightPosition(int a[],int b[],int n);
int IsRightDigit(int a[],int b[]);
main()
{
int number; //储存用户输入的整数
int level=1; //用户最多想猜多少次
int count=1; //记录用户已经猜的次数
int rightPosition; //用户输入的数字中正确位置的数量
int rightDigit; //用户输入的数字中正确且在不同位置的数字的数量
int a[10]={0}; //储存系统随机生成的四位数字
int b[4]={0}; //储存拆分后的用户输入的四位数字
int i;
MakeDigit(a,4);
//提示用户输入最多能够猜多少次(保证在0-15次之间)
do{
printf("How many times do you want to guess:");
//增强程序的健壮性
while(scanf(" %d",&level)!=1)
{
fflush(stdin);
printf("Input error!\n");
}
//将猜的次数限制在0-15次之间
if(level>0&&level<=15)
break;
if(level<=0)
printf("Input error!\n");
else
printf("too many times! Please reput.\n");
}while(level<=0||level>15);
//用循环实现多次猜数
do{
printf("NO.%d of %d times:",count,level);
scanf(" %d",&number);
//增强程序的健壮性
if(InputGuess(b,4,number)==-1)
{
printf("Input wrong! \n");
continue;
}
rightPosition=IsRightPosition(a,b,4);
rightDigit=IsRightDigit(a,b)-rightPosition;
printf("%dA%dB\n",rightPosition,rightDigit);
count++;
}while(rightPosition==4||count<=level);
//输出提示和结果
if(rightPosition==4)
printf("Congratulations,you guess the right number !\n");
else
printf(" Sorry,you haven't guess the right number. \n");
printf("Correct answer is: %d%d%d%d\n",a[0],a[1],a[2],a[3]);
system("pause");
}
//函数功能:将计算机随机生成的各位相异的四个四位数字存储到数组a中
void MakeDigit(int a[],int n)
{
int i,j,temp;
srand(time(NULL));
for(i=0;i<10;i++)
a[i]=i;
do
{
for(i=0;i<10;i++)
{
j=rand()%10;
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}while(a[0]==0);
}
//函数功能:将用户猜的四位数存入数组b中,如果用户输入非法数据则返回-1
int InputGuess(int b[],int n,int number)
{
if(number<1000||number>10000)
return -1;
else
{
int i;
for(i=0;i<n;i++)
{
b[3-i]=number%10;
number=number/10;
}
return 1;
}
}
//函数功能:输出数组a和数组b相同位置的元素相等的个数
int IsRightPosition(int a[],int b[],int n)
{
int i,j;
int count=0;
for(i=0;i<4;i++)
{
j=i;
if(a[i]==b[j])
count++;
}
return count;
}
//函数功能:输出数组a与数组b中相同元素的总数
int IsRightDigit(int a[],int b[])
{
int i,j;
int count=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(a[i]==b[j])
count++;
}
}
return count;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询