2010年3月19日 星期五

Problem 340 Master-Mind Hints,猜數字

此題就是我們平常在玩的猜數字遊戲,讀入一個 n 值後,n 為數字的數量,如果 n = 0,則程式結束;而再接下來第一行會讀到 n 個整數,那是此測試例子的答案,再接下來所輸入的 n 個整數,只要全部都是 0,則此測試例子結束;反之,需輸出它與答案比對的結果。

首先,宣告一個結構,而結構內容有一個數字,與一個使否有比對過的值:
struct Ans
{
int ansInt;
int isComp;
};

所以只須讀入 n 值,即可宣告一個結構陣列 a[n],存放答案:
struct Ans a[n];
for (i = 0; i < n; i ++)
{
scanf("%d", &m);
a[i].ansInt = m;
a[i].isComp = 0;
}

則也要宣告一個結構陣列 b[n],以接受測試資料,而在比對過程之中,需先將相同位置的數值比對一遍,如有比對成功,則將雙方的 isComp 改成 1,而比對成功的總數值為 A 的值。接著再將 b 內沒比對過的值再與 a 比對,如果有比對成功,也是將雙方的 isComp 改成 1,而比對成功的總數值則為 B 的值:
isZero = 1, A = 0, B = 0;
for (i = 0; i < n; i ++)
{
scanf("%d", &m);
if (m != 0) isZero = 0;
b[i].ansInt = m;
b[i].isComp = 0;
a[i].isComp = 0;
}
for (i = 0; i < n; i ++)
if (a[i].ansInt == b[i].ansInt)
A ++, a[i].isComp = 1, b[i].isComp = 1;
for (i = 0; i < n; i ++)
for (j = 0; j < n; j ++)
{
if (i != j && a[i].isComp == 0 && b[j].isComp == 0 && a[i].ansInt == b[j].ansInt)
B ++, a[i].isComp = 1, b[j].isComp = 1;
}
if (isZero) break;
else printf(" (%d,%d)\n", A, B);

By David.K

p340題目連結
回ACM題庫目錄
回首頁

沒有留言: