1. 电脑随机产生1000—9999之间的数字(包括1000、9999);
提示:用rand函数,该函数在stdlib.h库中,并保证多次运行产生不同的随机数
2. 玩家每轮有七次猜数的机会,如果七次都没有猜到,则失败,判为0分;
3. 玩家每轮可以请求帮助,提问关于产生数字的信息,扣分细则如下;
4. 游戏以百分制形式,初始分为100,最后得分最多为赢家。
帮助内容及扣分细则:
. 判断你所猜的数中各位数字对应位置正误情况,以R表正确,E表错误。若随机数是2537,而猜的数是1234,则输出EERE,代表猜的数第3位正确,第1,2,4位错误。
——扣当前分数的1/10
. 判断你所猜的数中正确数字是什么。若随机数是2537,而猜的数是1234,则输出有两个数字正确,它们是2,3。 ——扣当前分数的1/10
不知道。。。。。。。。。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<cmath>
int main()
{
float score = 100;
int Random = 20;//定义随机数
srand(time(0));
int a;//输入猜的数字
bool f = true;
void help1(int, int);
void help2(int, int);
while (Random < 1000 || Random>9999)//随机出来的值范围是1到10000,排除掉1000以下的
for (int i = 0; i < 10; i++)
Random = rand() % 10000 + 1;//随机数出来,循环十次是因为时间间隔太短
printf_s("\t\nRandom=%d\n", Random);///需要注释掉
int i = 1;
while (i != 8 && f)
{
scanf_s("%d", &a);
if (a == Random)
{
f = false;
for (int j = 1; j < i; j++)
score = score - score / 10;
break;
}
int k;
printf_s("选择帮助1/2?\n");
scanf_s("%d", &k);
if (k == 1)help1(a, Random);
else help2(a, Random);
i++;
}
if (f == true) printf_s("猜数字失败,所得分数为0分");
else printf_s("得分:%f", score);
return 0;
}
void help1(int a, int Random)
{
int ran[5], cai[5];
ran[0] = Random;
cai[0] = a;
for (int i = 1; i < 5; i++)
{
cai[i] = cai[0] % 10;//例子:1234取余4
cai[0] = cai[0] / 10;//123
//printf("\ncai[%d]=%d", i, cai[i]);
}
for (int i = 1; i < 5; i++)
{
ran[i] = ran[0] % 10;//例子:1234取余4
ran[0] = ran[0] / 10;//123
//printf("\nrun[%d]=%d", i, ran[i]);
}
for (int i = 4; i > 0; i--)
if (cai[i] == ran[i])printf_s("R");
else printf_s("E");
printf("\n");
}
void help2(int a, int Random)
{
int ran[5], cai[5];
ran[0] = Random;
cai[0] = a;
for (int i = 1; i < 5; i++)
{
cai[i] = cai[0] % 10;//例子:1234取余4
cai[0] = cai[0] / 10;//123
}
for (int i = 1; i < 5; i++)
{
ran[i] = ran[0] % 10;//例子:1234取余4
ran[0] = ran[0] / 10;//123
}
int num = 0;
for (num; num < 10; num++)//我的意思是每个都循环和0-9比较,存在的话就是真,如果都是真那么输出那个数字
{
bool f1 = false, f2 = false;
for (int i = 1; i < 5; i++)
if (num == cai[i])f1 = true;
for (int i = 1; i < 5; i++)
if (num == ran[i])f2 = true;
if (f1&&f2)printf_s("%d ", num);
}
}
哪里不懂可以问!大概还是可以实现吧!出问题了问我。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Rand();
int Judgement(int guess, int num);
void Cue1(int guess, int num);
void Cue2(int guess, int num);
void RemoveDuplication(int array[], int length);
void main()
{
int num = Rand();
int i;
int guess;
float grade = 100.0;
char get;
printf("游戏开始!%d\n",num);
for(i = 0; i < 7; i++)
{
printf("第%d次\n",i+1);
printf("请输入你猜的数字?\n");
scanf("%d",&guess);
if(!Judgement(guess,num))
{
printf("猜错了!\n");
setbuf(stdin,0);
printf("是否需要提示?(Y/N)\n");
scanf("%c",&get);
if(get == 'Y' || get == 'y')
{
getchar();
printf("请选择帮助1或帮助2:(1/2)\n");
scanf("%c",&get);
if(get == '1')
{
Cue1(guess,num);
grade -= grade/10;
}
else if(get == '2')
{
Cue2(guess,num);
grade -= grade/10;
}
else
continue;
}
}
else
{
printf("你猜对了!\n");
break;
}
}
if(i == 7)
{
printf("你猜错了!\n");
printf("游戏结束!\n");
printf("正确答案为:%d\n",num);
grade = 0;
}
printf("你的得分为:%.2f\n",grade);
}
int Rand()
{
int num;
srand(time(0));
num = rand() % 9000 + 1000;
return num;
}
int Judgement(int guess, int num)
{
if(guess == num)
{
return 1;
}
else
return 0;
}
void Cue1(int guess, int num)
{
int i;
char cue[4];
printf("提示为:");
for(i = 3; i > -1; i--)
{
if(guess%10 == num%10)
{
cue[i] = 'R';
}
else
cue[i] = 'E';
guess /= 10;
num /=10;
}
for(i = 0; i < 4; i++)
{
putchar(cue[i]);
}
}
void Cue2(int guess, int num)
{
int i;
int j;
int k = 0;
int cue[4] = {-1, -1, -1, -1};
int t_guess[4];
int t_num[4];
for(i = 3; i > -1; i--)
{
t_guess[i] = guess % 10;
t_num[i] = num % 10;
guess /= 10;
num /= 10;
}
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
if(t_guess[i] == t_num[j])
{
cue[k] = t_guess[i];
k++;
}
}
}
for(i = 0; i < 4; i++)
{
printf("%d",cue[i]);
}
RemoveDuplication(cue, 4);
printf("正确的数字为:\t");
for(i = 0; i < 4; i++)
{
if(cue[i]>=0)
{
printf("%d\t",cue[i]);
}
}
}
void RemoveDuplication(int array[], int length)
{
int i;
int j;
for(i = 0; i < length; i++)
{
for(j = 0; j < length; j++)
{
if(j == i)
continue;
if(array[i] == array[j])
{
array[i] = -1;
}
}
}
}