在"1 2 3 4 5 6 7 8 9 10=100"中填上加减号,并不改变数字顺序,使式子成立
3个回答
展开全部
答案不唯一:
可编程穷举法求解,以下是全部解答:
123+4+5+67-89-10
123+4-5-6-7-8+9-10
123-45+6+7+8-9+10
123-4+5-6-7+8-9-10
123-4-5+6+7-8-9-10
12+34+56+7-8+9-10
12+3+45+67-8-9-10
12+3+45+6+7+8+9+10
12+3+4+5+67+8-9+10
12+3+4-5-6-7+89+10
12+3-4-5+67+8+9+10
12-3+4-5+6+7+89-10
12-3-4-5-6+7+89+10
1+234-56-78+9-10
1+23+4+56+7+8-9+10
1+23-4-5+6+78-9+10
1+2+34+5+67-8+9-10
1+2+3+4+56+7+8+9+10
1+2+3+4+5+6+78-9+10
1+2+3-4-5+6+78+9+10
1+2-3+4+5-6+78+9+10
1-2+3+45-6+78-9-10
1-2-34+56+78-9+10
1-2-3-4+5+6+78+9+10
如果允许在1前添加符号,另外还有如下解
-123-4-5-678+910
-12+34+5-6+78-9+10
-12+34-5+6+78+9-10
-12+3+4+5-6+7+89+10
-1+234-56-78-9+10
-1+23+4+56+7-8+9+10
-1+2+34+5+67-8-9+10
-1+2-34+56+78+9-10
-1+2-3+4-5+6+78+9+10
-1-234-567-8+910
-1-23-4+56-7+89-10
-1-2+34-5+67+8+9-10
-1-2+3+4+5-6+78+9+10
c语言源代码如下:
#include <stdio.h>
#include <string.h>
void calsign(long n,char *a)
{
int i;
for (i=9;i>=0;i--)
{
*(a+i)=n%3+'0';
n=n/3;
}
*(a+10)='\0';
}
void inssign(char *a,char *b)
{
int i,j;
for (i=9;i>=0;i--)
if (*(b+i)!='0')
{
for (j=24;j>i;j--)
*(a+j)=*(a+j-1);
*(a+j)=(*(b+i)=='1')?'+':'-';
}
}
int calnum(char *a)
{
long x=-1,sum=0;
int sign=1;
for (;*a!='\0';a++)
{
if (*a=='+'||*a=='-')
{
if (x!=-1) sum+=x*sign;
sign=(*a=='+')?1:-1;
x=-1;
}
else if (x==-1) x=*a-48;
else x=x*10+*a-48;
}
sum+=x*sign;
return sum;
}
void main()
{
long n;
char sign[11],o[12]="12345678910",s[25];
for (n=0;n<59049;n++)
{
strcpy(s,o);
calsign(n,sign);
inssign(s,sign);
calnum(s);
if (calnum(s)==100) printf("%s\ ",s);
}
}
可编程穷举法求解,以下是全部解答:
123+4+5+67-89-10
123+4-5-6-7-8+9-10
123-45+6+7+8-9+10
123-4+5-6-7+8-9-10
123-4-5+6+7-8-9-10
12+34+56+7-8+9-10
12+3+45+67-8-9-10
12+3+45+6+7+8+9+10
12+3+4+5+67+8-9+10
12+3+4-5-6-7+89+10
12+3-4-5+67+8+9+10
12-3+4-5+6+7+89-10
12-3-4-5-6+7+89+10
1+234-56-78+9-10
1+23+4+56+7+8-9+10
1+23-4-5+6+78-9+10
1+2+34+5+67-8+9-10
1+2+3+4+56+7+8+9+10
1+2+3+4+5+6+78-9+10
1+2+3-4-5+6+78+9+10
1+2-3+4+5-6+78+9+10
1-2+3+45-6+78-9-10
1-2-34+56+78-9+10
1-2-3-4+5+6+78+9+10
如果允许在1前添加符号,另外还有如下解
-123-4-5-678+910
-12+34+5-6+78-9+10
-12+34-5+6+78+9-10
-12+3+4+5-6+7+89+10
-1+234-56-78-9+10
-1+23+4+56+7-8+9+10
-1+2+34+5+67-8-9+10
-1+2-34+56+78+9-10
-1+2-3+4-5+6+78+9+10
-1-234-567-8+910
-1-23-4+56-7+89-10
-1-2+34-5+67+8+9-10
-1-2+3+4+5-6+78+9+10
c语言源代码如下:
#include <stdio.h>
#include <string.h>
void calsign(long n,char *a)
{
int i;
for (i=9;i>=0;i--)
{
*(a+i)=n%3+'0';
n=n/3;
}
*(a+10)='\0';
}
void inssign(char *a,char *b)
{
int i,j;
for (i=9;i>=0;i--)
if (*(b+i)!='0')
{
for (j=24;j>i;j--)
*(a+j)=*(a+j-1);
*(a+j)=(*(b+i)=='1')?'+':'-';
}
}
int calnum(char *a)
{
long x=-1,sum=0;
int sign=1;
for (;*a!='\0';a++)
{
if (*a=='+'||*a=='-')
{
if (x!=-1) sum+=x*sign;
sign=(*a=='+')?1:-1;
x=-1;
}
else if (x==-1) x=*a-48;
else x=x*10+*a-48;
}
sum+=x*sign;
return sum;
}
void main()
{
long n;
char sign[11],o[12]="12345678910",s[25];
for (n=0;n<59049;n++)
{
strcpy(s,o);
calsign(n,sign);
inssign(s,sign);
calnum(s);
if (calnum(s)==100) printf("%s\ ",s);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询