我看到了一個我決定嘗試的編程任務,它基本上是用戶輸入諸如「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個可能的位置,然後藉助另一個(內部)循環插入'+',' - '或空格。然後遍歷整個字符串,解析它以執行計算。 – 2014-01-21 21:38:04