//本题的思路:要在“123456789”中添加加减号,那么可以将它们隔开可以是这样“ 1 2 3 4 5 6 7 8 9”,这样在他们的间隙就有空格(包括最前面的空格)9个,而这些空//格可以填写的内容只有3种情况:1.空,2.“+”3.“-”;这样算复杂度为3^9,用递归的方法实现并保存所有的集合。将得到的所有字符串进行分离并将分离的字符转化为数//字,加入到集合,最后集合相加和100比对(注意在分离时的问题,可能会导致出错,本人当时也是错了N多次)。
void getNumber1(string str, int pos, vector<string>& vec)
{
for (int i = 0; i < 3; i++)
{
switch(i)
{
case 0:
{
string tem_str = str;
char a[10];
memset(a, 0, 10);
itoa(pos, a, 10);
int mypos = str.find(a);
str.insert(mypos, "");
if (pos == 9)
{
vec.push_back(str);
str = tem_str;
break;
}
getNumber1(str, pos + 1, vec);
str = tem_str;
break;
}
case 1:
{
string tem_str = str;
char a[10];
memset(a, 0, 10);
itoa(pos, a, 10);
int mypos = str.find(a);
str.insert(mypos, "-");
if (pos == 9)
{
vec.push_back(str);
str = tem_str;
break;
}
getNumber1(str, pos + 1, vec);
str = tem_str;
break;
}
case 2:
{
string tem_str = str;
char a[10];
memset(a, 0, 10);
itoa(pos, a, 10);
int mypos = str.find(a);
str.insert(mypos, "+");
if (pos == 9)
{
vec.push_back(str);
str = tem_str;
break;
}
getNumber1(str, pos + 1, vec);
str = tem_str;
break;
}
default:
break;
}
}
if (pos == 8)
{
return;
}
}
void main()
{
vector<string> vec;
getNumber1(string("123456789"), 1, vec);
vector<string> result;
for (int i =0; i < vec.size(); i++)
{
if (i == 18062)
{
int m =0;
}
string str = vec[i];
vector<int> tem_vec;
int count = 0;
int flag = 1;
while (str.find("+") != string::npos||str.find("-") != string::npos)
{
int pos = str.find_first_of("+");
int pos1 = str.find_first_of("-");
int rpos = 0;
if (pos1 >= 0&& pos >= 0)
{
if (pos > pos1)
{
rpos = pos1;
}else
{
rpos = pos;
}
}else
{
if (pos > pos1)
{
rpos = pos;
}else
{
rpos = pos1;
}
}
int tem = atoi(str.c_str());
tem_vec.push_back(tem);
char ch[10];
memset(ch, 0, 10);
char* p = itoa(tem, ch, 10);
int size = strlen(p);
p[0] = p[size - 1];
p[1] = '\0';
int mypos = str.find_first_of(p);
str = str.substr(mypos + 1);
}
for (int i = 0; i < tem_vec.size(); i++)
{
count+= tem_vec[i];
}
if (count == 100)
{
result.push_back(vec[i]);
}
}
}