UVa 10530

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
//By Koios1143
#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"){
// 數字最大是 n-1
Upper_bound = min(Upper_bound, n-1);
}
else if(s == "too low"){
// 數字最小是 n+1
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;
}