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

来源:互联网 发布:大连知润信息科技 培训 编辑:程序博客网 时间:2024/05/08 09:39
使用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出栈,回到第一步
                    如果不是就出栈两个(一个数字和一个运算符),回到第二步
0 0
原创粉丝点击