题目链接:http://poj.org/problem?id=2328
解释下题意把,要求我们根据输入的猜测,来判断是否正确
我用l和r来表示区间的最小数和最大数,注意正确区间的更新,我的思路是
如果一个数too high但它小于l那么说谎,如果在l和r之间,更新r
如果一个数too low但它大于r那么说谎,如果在l和r之间,更新l
如果判断数时不在区间内,就是说谎。
代码如下:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;
int main() { int l=0,r=11,n,flag=0; char ch[10]; while(scanf("%d",&n;)&&n;) { getchar(); scanf("%[^n]",ch); if(ch[4]=='t') { if(n<=l||n>=r) flag=1; if(flag) printf("Stan is dishonestn"); else printf("Stan may be honestn"); flag=0; l=0; r=11; } if(ch[4]=='h') { if(n<=l) flag=1; else if(n<r) r=n; } if(ch[4]=='l') { if(n>=r) flag=1; else if(n>l) l=n; } } }
|