C语言人机猜数问题

C语言人机猜数问题

由计算机随机产生一个四位整数,请人猜这四位整数是多少。人输入一个四位数后,计算机首先判断其中有几位猜对了,并且对的数字中有几位位置也正确,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机随机产生的四位数是多少为止。

需求:
1.一个判断有几个数字正确的函数
2.一个判断有几个位置正确的函数
3.一个判断输入是否正确的函数

int numRight(int n, int num);
int locationRight(int n, int num);
int getNum();
/*15
由计算机随机产生一个四位整数,请人猜这四位整数
是多少。人输入一个四位数后,计算机首先判断其中
有几位猜对了,并且对的数字中有几位位置也正确,
将结果显示出来,给人以提示,请人再猜,直到人猜
出计算机随机产生的四位数是多少为止。
*/
void mycode_15()
{
	srand((unsigned)time(NULL));

	int num, n, A = 0, B = 0;

	num = (rand() % 9000) + 1000;
	
	while ((A != 4) || (B != 4))
	{
		n = getNum();

		A = numRight(n, num);
		B = locationRight(n, num);

		printf("%d   %dA%dB\n", n, A, B);

		if (n == num)
			break;
	}

	printf("\n\n答对了,答案是:%d", num);
}

int numRight(int n,int num)
{
	int count = 0;
	char numarray[5];
	char narray[5];
	bool fuck;

	_itoa_s(num, numarray, 10);
	_itoa_s(n, narray, 10);

	fuck = false;
	for (int i = 0; i < 4; i++)
	{
		//后面的数字跟前面的数字比较,一样的话就不用循环跟答案数组对比
		for (int o = 0; o < i;o++)
		if (narray[i] == narray[o])
		{
			fuck = true;
			break;
		}

		//输入数组跟答案数组用穷举法进行比较,一样加一
		for (int j = 0; j < 4; j++)
		{
			if (fuck)
				break;

			if (narray[i] == numarray[j])
			{
				count++;
				break;
			}
		}

		fuck = false;
	}
	
	return count;
}

int locationRight(int n,int num)
{
	int count = 0;
	char numarray[5];
	char narray[5];

	_itoa_s(num, numarray, 10);
	_itoa_s(n, narray, 10);

	for (int i = 0; i < 4;i++)
	if (narray[i] == numarray[i])
		count++;

	return count;
}

int getNum()
{
	int num;

	printf("请输入数字(4位数):");
	
	while ((scanf_s("%d", &num)) != 1 || (num<1000 || num>9999))
	{
		printf("请输入数字(4位数):");

		while (getchar() != '\n')
			continue;
	}

	return num;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值