实现一个猜数字游戏程序。程序首先读取一个整数 n(表示接下来要处理的数字序列的长度,且 n 满足一定范围限制,可能是小于等于 maxn),然后读取一组长度为 n 的整数序列作为预设的数字序列。之后进入循环,每次循环读取一组同样长度为 n 的用户猜测的数字序列,根据以下规则给出猜测结果反馈:
如果用户猜测的数字与预设数字在相同位置且数值相同,记为完全猜对,统计完全猜对的数字个数记为 A。
对于数字 1 到 9,分别统计在预设数字序列和用户猜测数字序列中每个数字出现的次数,取两者中较小的次数累加起来,得到猜对数字但位置不对的数字个数记为 B。
输出本次猜测的结果,格式为 (A, A - B),其中 A 是完全猜对的数字个数,A - B 是位置猜对但数字本身不对的数字个数。
当用户猜测的数字序列的第一个数字为 0 时,结束当前轮次的猜数字游戏流程,若还有下一轮次(即再次成功读取到新的 n 且 n 不为 0),则进入下一轮次的游戏。
#include<iostream>
using namespace std;
#define maxn 1100
int main()
{
int n, a[maxn], b[maxn];
int kase = 0;
while (scanf_s("%d", &n) == 1 && n)//输入的n必须是非零整数才能进入循环
{
printf("Game %d:\n",++kase);
for (int i = 0; i < n; i++) scanf_s("%d", &a[i]);
for (;;)//无限循环,靠break或continue跳出循环
{
int A = 0, B = 0;
for (int i = 0; i < n; i++)
{
scanf_s("%d",&b[i]);
if (a[i] == b[i]) A++;//位置和数值均相等,A+1
}
if (b[0] == 0)break;
for (int d = 1; d <= 9; d++)
{
int c1 = 0, c2 = 0;
for (int i = 0; i < n; i++)
{
if (a[i] == d)c1++;
if (b[i] == d)c2++;
}
if (c1 < c2) B += c1;
else B += c2;
}//为了确定猜对数字但位置不对的数字个数
printf("(%d,%d)\n",A,A-B);
}
}
return 0;
}
标签:数字,int,++,maxn,序列,猜测
From: https://www.cnblogs.com/xuzhenxuexi/p/18565905