UVa 10530
題目
http://domen111.github.io/UVa-Easy-Viewer/?10530
現在正在玩猜數字的遊戲,對方會告訴你你猜的數字太高或是太低,但是我們懷疑對方會說謊
假設當我們猜到正確數字時對方並不會說謊,給定每回合猜數字的結果,請幫忙判斷對方是否有說謊
猜數字的範圍在 $1$~$10$ 之間
想法
給定一個數字,對方回覆太大(too high
),那麼如果沒說謊,我們的數字應該比他還小,那麼我們只需要紀錄 too high
當中最小的數字即可
反過來說,對方回覆太大(too low
),那麼如果沒說謊,我們的數字應該比他還大,那麼我們只需要紀錄 too low
當中最大的數字即可
如果我們猜到的數字介在 too high
以及 too low
之間,那就表示對方沒有說謊
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include<iostream> using namespace std; int n, Upper_bound = 10, Lower_bound = 1; string s; int main(){ while(cin>>n && n){ getchar(); getline(cin, s); if(s == "too high"){ Upper_bound = min(Upper_bound, n-1); } else if(s == "too low"){ Lower_bound = max(Lower_bound, n+1); } else if(s == "right on"){ if(n >= Lower_bound && n <= Upper_bound){ cout<<"Stan may be honest\n"; } else{ cout<<"Stan is dishonest\n"; } Upper_bound = 10, Lower_bound = 1; } } return 0; }
|