#D0248. 猜三位数

猜三位数

题目描述

这是一道交互题

33DAI 想好了一个三位数 aa,保证 aa 的三个数位上的数字各不相同。你有最多 nn 次机会来猜这个数。

你需要写一个程序和 33DAI 的交互程序通过输入输出互动。每次你输出完你猜测的结果后,都可以通过输入得到 33DAI 的反馈。33DAI 的反馈是三个数字,每个都是 0,1,20,1,2 中的一个。分别表示那个位置上你的输出和 aa 的匹配情况。

  • 0:表示 bb 这个位置上的这个数字在 aa 中没有出现过。
  • 1:表示 bb 这个位置上的这个数字在 aa 中出现过,但不是这个位置出现的。
  • 2:表示 bb 这个位置上的数字和 aa 这个位置上的数字一样。

当 33DAI 给你反馈 222222 时,你应该结束你的程序。

交互题注意事项

请在每次输出之后刷新缓冲区,对于使用 cin/cout 的同学,可以使用 cout.flush(); 的方式刷新缓冲区。对于使用 scanf/printf 的同学,可以使用 fflush(stdout); 的方式刷新缓冲区。下面是一个能拿到本题 3030 分的样例程序。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    char x, y, z;
    for (int i = 100; i <= 999; i++)
    {
        cout << i << "\n";
        cout.flush();
        cin >> x >> y >> z;
        if (x == '2' && y == '2' && z == '2')
        {
            break;
        }
    }
    return 0;
}

交互格式

参考上面的 3030 分代码,不停输出你猜的数字,直到 33DAI 给你反馈 222 即可。你要做的就是想想怎么降低你的猜测次数。

数据规模与约定

对于 100%100\% 的数据,123a987123 \le a\le 987。保证 aa 的三个数位上的数字各不相同。

  • 子任务 1(30 分):保证 n=1000n=1000。即最多猜 10001000 次。
  • 子任务 2(30 分):保证 n=648n=648。即最多猜 648648 次。
  • 子任务 3(40 分):保证 n=10n=10。即最多猜 1010 次。