给一个初始操作数a,然后对这个操作数执行n次加减乘余的计算操作【每次操作a自增1,而且不考虑运算符优先级,谁在前面先算谁】,最后会得到一个结果数x,问如何求出这些操作符??
重要:程序不能使用递归,最好只用一个主函数!!
比如,给你一个初始数3,执行7次加减乘余操作,最后得到结果147,那么有一种操作符序列满足条件:* + + - * + +
既:3*4+5+6-7*8+9+10=147
求一个程序算法,关于找出符合条件的操作符排列?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- 纹枰老妖 2016-05-13 14:33关注
亲测合格,请验证:
#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");
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的
- ¥15 r语言蛋白组学相关问题