如何在123456789之间添加“+”,“—”号使表达式的值等于100,如123+45-67+8-9=100,我写了个程序,但有重复的,也有错误的,但我不知道错哪了,请大家指教!源代码如下:
#include <math.h>
#include <iostream>
using namespace std;
#define Length 8
void factor(int n, int arr[], int arrSign[], int arrLength)
{
if(n==-1)
{
int Result = 0;
int tmpResult = arr[0];
int tmpIndex = 1;
for(int i=0;i<=arrLength;i++)
{
if(arrSign[i]!=0)
{
Result += tmpResult*arrSign[i];
tmpResult = arr[i+1];
tmpIndex = 1;
}
else
{
tmpResult += arr[i+1]*(int)pow(10,tmpIndex);
tmpIndex++;
}
}
Result += tmpResult;
if(Result==100)
{
//cout<<arr[arrLength];
for(int i=arrLength;i>-1;i--)
{
if(arrSign[i]==-1)
cout<<"-";
else if(arrSign[i]==1&&i!=8)
cout<<"+";
cout<<arr[i];
}
cout<<"=100"<<endl;
}
}
else
{
for(int i=-1;i<2;i++)
{
arrSign[n] = i;
factor(n-1, arr, arrSign, arrLength);
}
}
}
int main()
{
int a[]={9,8,7,6,5,4,3,2,1,0};
int pa[Length+1];
factor(Length, a, pa, Length);
system("pause");
return 0;
}
运行如图如下:-1+2-3+4+5+6+78+9=100
12-3-4+5-6+7+89=100
123+4+56+7-89=100
12+3-4+5+67+8+9=100
12+3+4+5-6-7+89=100
1+23-4+56+7+8+9=100
1+23-4+5+6+78-9=100
1+2+3-4+5+6+78+9=100
1+2+34-5+67-8+9=100
12-3-4+5-6+7+89=100
123+4+56+7-89=100
12+3-4+5+67+8+9=100
12+3+4+5-6-7+89=100
1+23-4+56+7+8+9=100
1+23-4+5+6+78-9=100
1+2+3-4+5+6+78+9=100
1+2+34-5+67-8+9=100
请按任意键继续. . .
[此贴子已经被作者于2007-7-1 10:45:46编辑过]