//此文我是用c语言写的!!!
为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
某批警察叔叔正在进行智力训练:
12 3 4 5 6 7 8 9 = 110;
请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。
请你利用计算机的优势,帮助警察叔叔快速找到所有答案。
每个答案占一行。形如:
12+34+56+7-8+9
123+4+5+67-89
......
已知的两个答案可以输出,但不计分。
各个答案的前后顺序不重要。
#include<stdio.h>
#include<string.h>
void Dadd(char a[], int num);
int Sum(char a[],int flag);
int main()
{
char a[] = "1 2 3 4 5 6 7 8 9";
Dadd(a, 1);
return 0;
}
void Dadd(char a[], int num)
{
if (num == 17)
{
if ( Sum(a,1)== 110)
{
int k = strlen(a);
for (int i = 0; i<k;i++)
if (a[i] != ' ')
printf("%c", a[i]);
printf("\n");
}
}
else
{
a[num] = ' ';
Dadd(a, num + 2);
a[num] = '+';
Dadd(a, num + 2);
a[num] = '-';
Dadd(a, num + 2);
}
}
int Sum(char a[],int flag)
{
int sum = 0, i = 0;
while (a[i] != '\0')
{
if (a[i] == ' ')
{
i++;
continue;
}
if (a[i] >= '0'&&a[i] <= '9')
sum = sum * 10 + a[i] - '0';
else if (a[i] == '+')
return sum*flag + Sum(a + i + 1,1);
else if (a[i] == '-')
return sum*flag+Sum(a + i + 1,-1);
i++;
}
return sum*flag;
}
}