标签:clu 指定 一个 blog bre head and turn get
/*
猜数字:系统随机生成一个四位数,请根据下列判断猜出来
A:数值正确,位置正确
B:数值正确,位置不正确
C:数值不正确
*/
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#pragma warning (disable:4996)
#define pUCharHead unsigned char *
//以数组形式返回n个无重复的随机数,范围可指定[min,max]
pUCharHead GenNoRepeatRandomChar(unsigned char min, unsigned char max, int n)
{
//给随机数在堆中开辟一段内存
pUCharHead sysChar = (pUCharHead)malloc(sizeof(unsigned char)*n);
//定义种子
srand((unsigned char)time(NULL));
for (int i1 = 0; i1 < n; i1++)
{
//生成 ‘0’--‘9’的随机数 假设数对A取模,得到的值肯定在[0,A]之间
sysChar[i1] = (char)((rand() % (max-min))+ min);
//生成完成后检测是否重复,重复的话重新生成
for (int j = 0; j < i1; j++)
{
if (sysChar[i1] == sysChar[j])
{
i1--;
break;
}
}
}
return sysChar;
}
unsigned int * GenNoRepeatRandomUsInt(unsigned int min, unsigned int max, int n)
{
//给随机数在堆中开辟一段内存
unsigned int * sysChar = (unsigned int *)malloc(sizeof(unsigned int)*n);
//定义种子
srand((unsigned int)time(NULL));
for (int i1 = 0; i1 < n; i1++)
{
//生成 ‘0’--‘9’的随机数 假设数对A取模,得到的值肯定在[0,A]之间
sysChar[i1] = (unsigned int )((rand() % (max - min)) + min);
//生成完成后检测是否重复,重复的话重新生成
for (int j = 0; j < i1; j++)
{
if (sysChar[i1] == sysChar[j])
{
i1--;
break;
}
}
}
return sysChar;
}
int main()
{
//生成不重复随机数
int count = 4;//需要的随机数个数
pUCharHead sysChar = GenNoRepeatRandomChar(‘0‘, ‘9‘, count);
// unsigned int * sysInt = GenNoRepeatRandomUsInt(0, 9, 5);
//测试系统生成代码
//char sysChar[4] = {‘1‘,‘2‘,‘5‘,‘6‘ };
//人机交互
//游戏说明
printf("---------游戏说明-------------------\n");
printf("请输入四个不重复的10以内的数字,然后\n");
printf("根据提示猜出正确答案,提示说明:\n");
printf("A:数值正确,位置正确。\n");
printf("B:数值正确,位置不正确。\n");
printf("C:数值不正确。\n");
printf("---------游戏开始-------------------\n");
int UseTimes = 0;//记录成功完成总共的 使用次数
do
{
printf("力哥在此!快快报出你猜的数:\n");
char ch[4] = { 0 };//初始化用户输入
char printChar[4] = { 0 };//初始化存放ABC的数组
for (int j1=0; j1 < 4; j1++)
{
// scanf(" %c", &ch[j1]);
ch[j1] = getchar();
}
//清空用户的多余输入
char _tempChar;
while ((_tempChar = getchar()) != ‘\n‘ && _tempChar != EOF);
//----------------------判断业务-------------------
for (int i2=0; i2 < 4; i2++) //遍历用户输入的数
{
printChar[i2] = ‘C‘;//默认 值&位置都不正确
for (int j2 = 0; j2 < 4; j2++)//遍历系统随机生成的数
{
if (ch[i2] == sysChar[j2])//位置相同且数值相同
{
if ( i2 == j2)
{
printChar[i2] = ‘A‘;
break;//因为随机产生的数是不重复的,因此只判断一次;
}
else//位置不相同但数值相同
{
printChar[i2] = ‘B‘;
}
}
}
}
//一次判断完成,记录判断次数
UseTimes++;
//展示用户结果
for (int i3 = 0; i3 < 4; i3++)
{
printf("%c", printChar[i3]);
}
printf("\n");
//正确与否判断
if ((printChar[0] ==‘A‘)&&( printChar[1] ==‘A‘) &&(printChar[2] ==‘A‘)&&( printChar[3]==‘A‘))
{
printf("恭喜你,使用了%d次回答正确!。\n",UseTimes);
system("pause");
break;
}
} while (1);
free(sysChar);
return 0;
}
标签:clu 指定 一个 blog bre head and turn get
原文地址:http://www.cnblogs.com/evenio/p/8a5842d14926bcf7b4aeeb55a2b45729.html