1. 猜数字看人品

描述

Tom 和 Jerry 做猜数字的游戏,Tom 想一个数字然后让 Jerry 去猜,数字的范围在 1 到 10 之间。对于 Jerry 每讲的一个数,Tom 都要讲这个数是 too high 或者 too low 或者 right on,直到 right on 结束。为了防止 Tom 作弊,Jerry 把每一次的对话记录下来,现在让你去判断 Tom 有没有作弊。

输入

游戏可能做很多次,直到 Jerry 猜 0 的时候游戏结束,每一次猜测由一个正整数和一行回答组成。

输出

对每一次游戏如果 Tom 的回答有自相矛盾的地方,就输出 Tom is dishonest,否则输出 Tom may be honest。

测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 以文本方式显示
  1. 5↵
  2. too low↵
  3. 7↵
  4. too high↵
  5. 6↵
  6. right on↵
  7. 10↵
  8. too high↵
  9. 3↵
  10. too low↵
  11. 4↵
  12. too high↵
  13. 2↵
  14. right on↵
  15. 0↵
以文本方式显示
  1. Tom may be honest↵
  2. Tom is dishonest↵
1秒 1024KB 0

注意事项

解答本题时有我有以下几点需要注意:

1.要注意字符串的输入,要把回车符吃掉。

2.在判断输入属于too low 还是too high 或者 right on 的时候,使用strcmp要用“”(双引号)而不是‘’(单引号) 来引用too low等。

3.在判断最高和最低的区间的时候 初始设定范围不可以用0-10 要用-1-11 

解释:在这个代码中,high 和 low 的初始值分别设置为 11 和 -1 是为了确保它们在第一次比较时会被更新。因为根据代码逻辑,high 和 low 只有在第一次比较中才会被更新为实际的值。

如果将 high 和 low 的初始值设置为 10 和 0,那么在第一次比较时,如果 n 的值恰好等于 10 或 0,那么 high 或 low 将不会被更新,而仍然保持初始值。这可能会导致后续的比较出现错误的结果。

通过将 high 和 low 的初始值设置为比实际可能的最大值和最小值更大和更小的值,可以确保它们在第一次比较时一定会被更新为正确的值。这样可以避免由于初始值的限制而导致的错误结果。

4.要在判断right on  这种情况时 最后把最高和最低值重新赋值为-1-11,不然会影响下一轮游戏是否作弊的判定。

代码

#include
#include
int main()
{
	int n, high = 11, low = -1;
	char s[10];
	
	while (scanf("%d", &n))
	{
		if (n == 0) break;
		getchar();
		gets(s);
		if (strcmp(s, "too high") == 0)
		{
			if (n < high)
			{
				high = n;
			}
		}
		else if (strcmp(s, "too low") == 0)
		{
			if (n > low)
			{
				low = n;
			}
		}
		else if (strcmp(s, "right on") == 0)
		{
			if ((n > low) && (n < high))
			{
				printf("Tom may be honest\n");
			}
			else
			{
				printf("Tom is dishonest\n");
			}

			high = 11;
			low = -1;
		}
	}
}

你可能感兴趣的:(程序设计方法与实践,c语言)