问题:
?????????设计一个算法在 1,2,……9(顺序不变)数值之间插入+或者-或者什么都不插入, 使得计算结果总是 100 的程序。?
//例如 1 + 2 + 34 - 5 + 67 - 8 + 9 = 100。
思路:
? ? ? ??
代码:
#include<iostream>
using namespace std;
const int N = 9;
int arr[N] = { 1,2,3,4,5,6,7,8,9 };
char op[N]; // 存储操作符的数组
// 回溯函数,用于搜索所有可能的表达式
void func(int sum, int preAdd, int i) {
if (i == N) { // 到达最后一个位置
if (sum == 100) { // 计算结果等于100
cout << arr[0]; // 输出第一个数字
for (int j = 1; j < N; j++) {
if (op[j] != ' ')
cout << op[j]; // 输出操作符(如果存在)
cout << arr[j]; // 输出数字
}
cout << "=100" << endl; // 输出结果
}
return;
}
else {
// 选择插入 "+"
op[i] = '+';
func(sum + arr[i], arr[i], i + 1); // 递归调用函数
// 选择插入 "-"
op[i] = '-';
func(sum - arr[i], -arr[i], i + 1); // 递归调用函数
// 选择不插入任何符号
op[i] = ' ';
int tempN = 0;
if (preAdd > 0)
tempN = preAdd * 10 + arr[i];
else
tempN = preAdd * 10 - arr[i];
func(sum - preAdd + tempN, tempN, i + 1); // 递归调用函数
}
}
int main() {
func(arr[0], arr[0], 1); // 调用回溯函数,从第二个位置开始搜索
return 0;
}