题目描述
风靡全球的猜单词游戏有了数学版本!在这个游戏中,计算机会秘密产⽣⼀个隐藏的表达式,例如 90/5 × 2 = 36。但计算机不会把具体的表达式告诉你,⽽是只把表达式的计算结果 (在前⾯的例⼦中是 36)告诉你。接下来,你需要⽤尽可能少的次数把这个表达式猜出来!
你可以和计算机多次互动完成猜测。在游戏的每⼀轮中,你都可以告诉计算机⼀个长度是 6 的字符串表达式,仅由数字 0123456789 和四则运算 +-*/ 构成,表达式中不含负数且数字不包含前导零,并且表达式的计算结果必须是游戏开始时给出的数值 (在我们的例⼦中是 36)。计算机收到你猜测的表达式后,会对你给出表达式中的每⼀个字符分别给出反馈:
·绿⾊:这个字符出现在隐藏表达式中,且位置正确;
·黄⾊:这个字符出现在隐藏表达式中,但位置不正确;
·灰⾊:这个字符没有出现在隐藏表达式中。
下⾯是⼀个三次猜中隐藏表达式的例⼦:
在你猜了很多次以后,觉得这个游戏已经有些⽆聊了。现在你希望编⼀个程序,让你的程序代替你在 12 次 猜测之内得到隐藏的表达式。
输入输出格式
本题为交互题,评测时会模拟键盘输⼊并读取程序的屏幕输出。⾸先,评测程序会在键盘输⼊⼀⾏⼀个整数 n,代表隐藏表达式的计算结果,然后进⼊交互模式并等待你的程序输出⼀⾏ (对隐藏的表达式作出猜测)。评测程序读取到你屏幕上的输出后,会及时⽤键盘输⼊的⽅式给出反馈。以下 C++ 代码⽚段可以实 现与评测程序的交互 (你需要补全其他必要的内容):
在交互过程中,评测程序会及时的对你的输出给出反馈 (作为键盘输⼊给程序):
对于不正确的表达式 (例如有多余的空格、表达式不合法或值错误等),反馈六个半⾓减号 (“-”);
对于值正确的表达式,反馈六个字符,其中:
“A” 表⽰在表达式中出现且位置正确;
“B” 表⽰在表达式中出现且位置不正确;
“X” 表⽰在表达式中未出现。
注意隐藏表达式中同⼀个数字可能多次出现。如果你猜测的表达式中某个数字出现了多次,评测程序会优 先给出 “A” 的结果,然后从左到右给出 “B” 的结果,多余的数字给出 “X” 的结果。在 12 次猜测以内得到“AAAAAA” 且程序正常终⽌即被判定为正确。
本题中四则运算规则:先乘除、后加减,同优先级从左到右计算,允许计算过程中出现负数。除法是有理数的除法⽽⾮整除,即 2/5*10 的值为 4 且禁⽌除零。完整的交互过程应在 1 秒内完成;评测程序的运⾏时间很短,可以忽略不计。
输入输出样例数据1
36 (键盘输⼊)
6+3*10 (屏幕输出)
XXXBXB (键盘输⼊)
6+3*11 (屏幕输出,表达式的值不等于36)
------ (键盘输⼊,半⻆减号,提示输出不合法)
50-2*7 (屏幕输出)
BAXBAX (键盘输⼊)
90/5*2 (屏幕输出)
AAAAAA (键盘输⼊,游戏结束,程序退出,共猜4次)
上⾯的交互过程对应了题图的交互过程,但中间有⼀次输⼊⾮法表达式的情况。
输入输出样例数据2
8 (键盘输⼊)
10-4+2 (屏幕输出)
BXXXXX (键盘输⼊)
7*6-34 (屏幕输出)
XXXXBX (键盘输⼊)
3+15/3 (屏幕输出)
ABBABX (键盘输⼊)
35/5+1 (屏幕输出)
AAAAAA (键盘输⼊,游戏结束,程序退出,共猜4次)
数据规模
对于 50% 的数据,隐藏表达式⾄多只包含两个运算符,且运算符只有加法和减法。
对于 100% 的数据,1 ≤ n ≤ 999, 999。保证⾄少存在⼀个计算结果等于 n 的表达式。