實現一個猜數字遊戲程式。程式首先讀取一個整數 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;
}