标签:
题目:两个人玩猜数字游戏(1~10),A选择一个数字,B不断报数,A对应说:高、低、对;
现在B怀疑A作弊,在这个过程中改变数字,他想判断A是否作弊。
分析:简单题。可以把所有的序列存起来,然后比较判断是否存在矛盾即可。
这里利用一个数组做10个数字的标记;
如果A说小,就把所有小于等于当前数字n的数字标记成小(-1);
如果A说大,就把所有小于等于当前数字n的数字标记成大(1);
标记过程中判断是否有矛盾即可(已有标记的值和新标记是否相同);
最后判断,所猜数字是否被标记即可。
说明:(⊙v⊙)。
#include <cstdlib> #include <cstring> #include <cstdio> int used[11]; char buf1[9],buf2[9]; int main() { int n; while (scanf("%d",&n) && n) { memset(used, 0, sizeof(used)); scanf("%s%s",buf1,buf2); int flag = 0; while (buf1[0] != 'r') { if (!flag) { if (buf2[0] == 'h') { for (int i = n ; i <= 10 ; ++ i) if (used[i] == -1) flag = 1; else used[i] = 1; }else { for (int i = n ; i >= 1 ; -- i) if (used[i] == 1) flag = 1; else used[i] = -1; } } scanf("%d%s%s",&n,buf1,buf2); } if (used[n]) flag = 1; if (!flag) printf("Stan may be honest\n"); else printf("Stan is dishonest\n"); } return 0; }
标签:
原文地址:http://blog.csdn.net/mobius_strip/article/details/43635025