HDU 1172 猜數字(列舉)

2021-08-25 02:25:42 字數 1567 閱讀 8818

#hdu - 1172 - 猜數字

猜數字遊戲是gameboy最喜歡的遊戲之一。遊戲的規則是這樣的:計算機隨機產生乙個四位數,然後玩家猜這個四位數是什麼。每猜乙個數,計算機都會告訴玩家猜對幾個數字,其中有幾個數字在正確的位置上。

比如計算機隨機產生的數字為1122。如果玩家猜1234,因為1,2這兩個數字同時存在於這兩個數中,而且1在這兩個數中的位置是相同的,所以計算機會告訴玩家猜對了2個數字,其中乙個在正確的位置。如果玩家猜1111,那麼計算機會告訴他猜對2個數字,有2個在正確的位置。

現在給你一段gameboy與計算機的對話過程,你的任務是根據這段對話確定這個四位數是什麼。

input

輸入資料有多組。每組的第一行為乙個正整數n(1<=n<=100),表示在這段對話中共有n次問答。在接下來的n行中,每行三個整數a,b,c。gameboy猜這個四位數為a,然後計算機回答猜對了b個數字,其中c個在正確的位置上。當n=0時,輸入資料結束。

output

每組輸入資料對應一行輸出。如果根據這段對話能確定這個四位數,則輸出這個四位數,若不能,則輸出"not sure"。

sample input

64815 2 1

5716 1 0

7842 1 0

4901 0 0

8585 3 3

8555 3 2

24815 0 0

2999 3 3

0sample output

3585

not sure

題目鏈結

這個題目就是說電腦隨機給你個數,然後猜數,猜了電腦告訴你有幾個數字一樣,幾個正確的數字位於正確的位置。問你原數是多少,如果能猜得出來,輸出數,否則就輸出not sure。

這個題目資料量不算大,可以直接暴力列舉,1000到9999,看看把其中符合條件的數留下,其餘去掉。就是在寫**的時候,感覺算有幾個數相同時需要注意一下,具體**裡就看懂了。

#include #include #include using namespace std;

const int maxn = 1e5;

int book[maxn];

int cor(int x, int y)

return ans;

}int cmp(int x, int y)

i = 0;

while(y)

for(i = 0; i < 4; i++)

for(int j = 0; j < 4; j++)

if(a[i] == b[j])

return ans;

}int main()

}int num = 0, ans;

for(int i = 1000; i <= 9999; i++)

if(num >= 2) break ;

}if(num != 1) printf("not sure\n");

else printf("%d\n", ans);

}return 0;

}

列舉 hdu1172 猜數字

因為時間給的非常多,然後測試組數又很小,所以是乙個很粗暴的模擬 只要從1000到9999列舉答案,然後再判斷符合答案的個數,看個數的數量差不多就做完了 然後就在於如何判斷有幾個數字同時存在,我的思路是用vis1和vis2分別記錄進行比較的兩個數字中,每個數字出現的次數 那麼如果對於某個數字,vis1...

Hdu 1172 猜數字 列舉

題目傳送門 因為題目限定為4位數,所以讀入所有情況,並從1000列舉到9999,判斷是否有1個數滿足所有條件,如果有即輸出,如果有超過1個或者沒有,就輸出not sure。include include include include include include using namespace ...

HDU 1172 猜數字(列舉)

傳送門 題目中說全是四位數,最多不超過100次問答,就把每乙個四位數都列舉出來,然後判斷是不是滿足問答的結果,如果滿足就加一,最後如果有多個滿足的結果就是不確定,如果只有乙個滿足的數就輸出。include includeusing namespace std int n,a 20 b 20 c 20...