【发布时间】:2014-01-21 21:33:36
【问题描述】:
我看到一个我决定尝试的编程作业,它基本上是用户输入“123456789=120”之类的内容,程序必须在不同的位置插入一个“+”或“-”来生成语句真的。例如,在这种情况下,它可以做到 123+4-5+6-7+8-9 = 120。只有 3^8 种可能的组合,所以我认为暴力破解是可以的,但我没有'不确切知道我可以按什么顺序进入/如何实际实施。更具体地说,我不知道插入“+”和“-”的顺序是什么。这是我所拥有的:
#include <iostream>
#include <cmath>
using namespace std;
int string_to_integer(string);
int main()
{
string input, result_string;
int result, possibilities;
getline(cin, input);
//remove spaces
for(int i = 0; i < input.size(); i++)
{
if(input[i] == ' ')
{
input.erase(i, 1);
}
}
result_string = input.substr(input.find('=') + 1, input.length() - input.find('='));
result = string_to_integer(result_string);
input.erase(input.find('='), input.length() - input.find('='));
possibilities = pow(3, input.length() - 1);
cout << possibilities;
}
int string_to_integer(string substring)
{
int total = 0;
int power = 1;
for(int i = substring.length() - 1; i >= 0; i--)
{
total += (power * (substring[i] - 48));
power *= 10;
}
return total;
}
【问题讨论】:
-
以三进制计数。
0=[nothing],1=[minus],2=[plus]. -
递归对于这种赋值很有用。
-
重复变化。你可以这样做:使用一个循环遍历所有 8 个可能的位置,然后在另一个(内部)循环的帮助下,插入一个“+”、一个“-”或一个空格。然后遍历整个字符串,解析它并执行计算。
-
不是有9个可能的位置,包括第一个标志吗?
-
您可以添加
+或不添加任何内容,这不会影响数字,但-肯定会。