</pre>等式变换描述: 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。1 2 3 4 5 6 7 8 9 = X比如:12-34+5-67+89 = 51+23+4-5+6-7-8-9 = 5请编写程序,统计满足该输入整数的所有等式的个数。运行时间限制: 无限制内存限制: 无限制输入: 正整数,等式右边的数字输出: 使该等式成立的个数样例输入: 5<p>样例输出: 21</p><p><pre name="code" class="cpp">#include<iostream>
using namespace std;
int num[9];
int symbol[8];
int k=5;
int ct=0;
bool Sum(int num[9],int k)
{
int i=0;
int sum=0;
int add=0;
int num1[9];//存放供计算的数值
int symbol1[8];//存放符号
int j=0;
num1[j]=num[i];//首先让1进入num1中
for( i=0;i<8;i++)
{
if (3!=symbol[i]) //不是合并符号
{
symbol1[j]=symbol[i];
j++;
num1[j]=num[i+1];
}
else if(3==symbol[i])//合并整数
{
num1[j]=num1[j]*10+num[i+1];
add++;//计算合并符号
}
}
sum=num1[0];
int length;
length=(sizeof(symbol)/sizeof(symbol[0])-add);
for(i=0;i<length;i++)
if(symbol1[i]==1)
sum=sum+num1[i+1];
else
{
sum=sum-num1[i+1];
}
return sum==k;
}
void SetSymbol(int n)
{
int k1,k2,k3,k4,k5,k6,k7,k8;
for(k1=1;k1<=3;k1++)
{
symbol[n]=k1;
for (k2=1;k2<=3;k2++)
{
symbol[n+1]=k2;
for (k3=1;k3<4;k3++)
{
symbol[n+2]=k3;
for (k4=1;k4<4;k4++)
{
symbol[n+3]=k4;
for (k5=1;k5<4;k5++)
{
symbol[n+4]=k5;
for (k6=1;k6<4;k6++)
{
symbol[n+5]=k6;
for (k7=1;k7<4;k7++)
{
symbol[n+6]=k7;
for (k8=1;k8<4;k8++)
{
symbol[n+7]=k8;
if(Sum(num,k))
{
ct++;
cout<<"第"<<ct<<"种"<<endl;
for(int i=0;i<8;i++)
{
cout<<num[i];
if(1==symbol[i])
cout<<"+";
else if(2==symbol[i])
cout<<"-";
}
cout<<num[8]<<"="<<k<<endl;
}
}
}
}
}
}
}
}
}
}
int main()
{
int i;
for(i=0;i<9;i++)
num[i]=i+1;
SetSymbol(0);
return 1;
}