使用n个1,2,3进行加减运算,最后结果还是1,2,3。要求每次数据的运算规则都是随机的,结果值也是随机的。
struct Data{
int num; //所选的数字
int type; //数据类型,包括数字(0),加号(1)和减号(2)
int sum; //结果值
};
stack<Data> want;
一.随机一个数n和结果值n
Data t;
t.num = n;
t.sum = n;
t.type = 0;
把t放入栈中
二.随机一个运算符A与t运算(t.sum aT.type)
Data aT;
aT.num = 0;
aT.sum = 0;
aT.type = 1 or 2; //A运算符
三.随机一个数m与aT,t运算(sum = t.sum aT.type mT.num )
Data mT;
mT.num = m;
mT.sum = ?;
mT.type = 0;
如果sum合法就把aT和mT放入栈中 (mT.sum = sum)
如果sum不合法:
根据剩余的数个数进行探测极限运算,得到最大值max(之后运算每次都加3)和最小值min(之后运算每次都减3)
a.如果(min <= 1 && max >= 1) || (min <= 2 && max >= 2) || (min <= 3 && max >= 3)就可以继续后面剩余数字的运算,继续第二步
b.如果不是:
aa.纠正G次错误,重复第二步(1<=G<=3)不要过大
如果纠正k次(k<=G)错误后,符合a的条件就继续
如果不符合就选择回退:
aaa.如果是第一个数,就t出栈,回到第一步
如果不是就出栈两个(一个数字和一个运算符),回到第二步