使用n个1,2,3进行加减运算,最后结果还是1,2,3

使用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出栈,回到第一步

                    如果不是就出栈两个(一个数字和一个运算符),回到第二步

点赞