求一个程序算法,关于找出符合条件的操作符排列?

给一个初始操作数a,然后对这个操作数执行n次加减乘余的计算操作【每次操作a自增1,而且不考虑运算符优先级,谁在前面先算谁】,最后会得到一个结果数x,问如何求出这些操作符??
重要:程序不能使用递归,最好只用一个主函数!!
比如,给你一个初始数3,执行7次加减乘余操作,最后得到结果147,那么有一种操作符序列满足条件:* + + - * + +
既:3*4+5+6-7*8+9+10=147

亲测合格,请验证:
#include
#include
using namespace std;

int num, opera_num, result;
char opera[100];

void main()
{
int i,j=0, max = 4, right_max=1, right_extent, model=3, model_temp,test_num;
cout << "请输入操作数" << endl;
cin >> num ;
cout << "请输入操作符个数" << endl;
cin >> opera_num;
cout << "请输入最后结果数" << endl;
cin >> result;

for (i = 1; i < opera_num; i++)
{
    max *= 4;
    model *= 4;
    right_max *= 4;
}
for (i = 0; i < max; i++)
{
    test_num = num;
    right_extent = right_max;
    for (model_temp = model; model_temp > 0; model_temp /= 4)
    {
        switch ((i&model_temp) / right_extent)
        {
        case 0:
            opera[j] = '+';
            test_num = test_num + (++num);
            break;

        case 1:
            opera[j] = '-';
            test_num = test_num - (++num);
            break;

        case 2:
            opera[j] = '*';
            test_num = test_num * (++num);
            break;

        case 3:
            opera[j] = '%';
            test_num = test_num % (++num);
            break;
        }
        right_extent /= 4;
        j++;
    }
    num -= opera_num;
    j = 0;
    if (test_num == result) goto end;
}
printf("没有符合结果的预测,请检查输入!");
system("pause");

end:
printf("这种公式符合结果数:%d ", num);
for (i = 0; i < opera_num; i++) printf("%c %d ", opera[i], ++num);
system("pause");
}


可以用动态规划算法。

不考虑效率的话,直接遍历就最简单了,毕竟条件都是定的

图片说明

题目描述还是不够清晰啊,比如说3到147,执行7次操作到147,运算符太多啦