简单交互题
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
题目描述
这是一道交互题。
在校学生计算机编程俱乐部年终师生交流会上,克露丝卡尔酱参与了“砸金蛋”游戏。游戏规则如下:主持人拿出 枚金蛋排成一排,每枚金蛋内有一张纸条,纸条上写有一个整数。金蛋内的数字满足以下条件:
- 相邻两枚金蛋内的数字之差恰好为 1
 - 至少有一枚金蛋内的数字为 0
 
例如: 即为一个合法的金蛋数字序列。
游戏开始后,克露丝卡尔酱可以砸开任意一个金蛋并查看其内的数字,如果数字是 0,则游戏结束,否则游戏继续,直到砸出的数字是 0 为止。
你能帮克露丝卡尔酱设计一个策略,帮助她找到一个数字为 0 的金蛋吗?
交互方式
首先从标准输入中读入一行,仅包含一个整数 (),表示金蛋的数量。
每次砸金蛋需要向标准输出输出一行并清空缓冲区,仅包含一个 之间的正整数 ,表示需要砸开的金蛋编号。已经砸开的金蛋不能再砸。然后从标准输入中读入一行,仅包含一个整数,表示第 个金蛋中的数字。若金蛋内的数字为 0 ,你的程序应输出一行,仅包含一个字符“!”(不包括引号),随后立即退出。
任何不符合交互要求的输出,包括交互格式错误等,都会导致未定义的运行结果。
样例 #1
样例输入 #1
12
1
2
2
0
样例输出 #1
1
2
10
12
!
提示
样例展示了一个可能的交互过程,金蛋数字序列为 ,一共砸开了4个蛋。
如何清空缓冲区:
- 在 C 和 C++ 中,使用 (如果你使用 )或 (如果你使用 )。
 - 在 Python 中,使用 。
 - 特别地,在 C++ 中,使用 会自动清空缓冲区。
 
#include <stdio.h>
int main() {
	int n; scanf("%d", &n); 
	for (int i = 1; i <= n; i++) {
		printf("%d\n" ,i); fflush(stdout);
		int x; scanf("%d", &x); 
		if (x == 0) {
			printf("!\n"); fflush(stdout);
			return 0;
		}
	}
	return 0;
}
USTC 2025 新生赛测试赛
- Status
 - Done
 - Rule
 - ACM/ICPC
 - Problem
 - 11
 - Start at
 - 2025-10-9 8:00
 - End at
 - 2025-10-12 9:00
 - Duration
 - 73 hour(s)
 - Host
 - Partic.
 - 84