1 2 3 4 5 6 7 8 9=99

/*Win-TC 1.8
//
//Although it is kind of ugly,
//this program will print out all the results
//when the equation, "1 2 3 4 5 6 7 8 9=99", holds.
//
//The origional problem is:
//there is a blank between each two digits from 1 to 9,
//and fill in some of these blanks with "+" or "-" to
//make the equation above hold.
*/

#include "stdio.h"
main()
{
long result();
int sign[10],i,j,k=0;
for(j=0;j<=9;j++)
sign[j]=1;                  /*for(j=1;j<=8;j++)sign[j]=0;printf("%ld\n",result(sign));*/
for(sign[1]=-1;sign[1]<=1;sign[1]++)
for(sign[2]=-1;sign[2]<=1;sign[2]++)
for(sign[3]=-1;sign[3]<=1;sign[3]++)
for(sign[4]=-1;sign[4]<=1;sign[4]++)
for(sign[5]=-1;sign[5]<=1;sign[5]++)
for(sign[6]=-1;sign[6]<=1;sign[6]++)
for(sign[7]=-1;sign[7]<=1;sign[7]++)
for(sign[8]=-1;sign[8]<=1;sign[8]++)
{                                /*  printf("%d ",++k);  3^8=6561*/
if(result(sign)==99)
{                            printf("%d\t",++k);
putch('1');
for(i=1;i<=8;i++)
{if(sign[i]<0)
putch('-');
else if(sign[i]>0)
putch('+');
/*   //switch (sign[i]){
//case -1:putch('-');
//case  1:putch('+');
//default:;
//}
*/
putch('1'+i);
}
printf("=99\n");
}
}
getch();
}

/*//calculating 123+45-67+8-9: [0]1(1)2(2)3[3]4(4)5[5]6(6)7[7]8[8]9[9]  */
long result(int sign[10])
{long b=0,index=0;
long *a,*num();                  /*a points at number*/
do {
a=num(index,sign);
b=b+(*a);
index=*(a+1);                   /* printf("%d %d ",index,b);  */
}
while(index<9);
return  b;
}

/*//reading in numbers such as 45: [3]4(4)5[5]                            */
long *num(long index,int sign[10])
{long number[2];
int pm=sign[index];
number[0]=(number[1]=index+1);
while(sign[number[1]]==0)
{
number[1]++;
number[0]=number[0]*10+number[1];
}                     /*printf("%d %d ",number[0],sign[number[1]]);*/
number[0]=pm*number[0];
return number;          /*{sign[3]*45,5}*/
}

评论

更进一步…… 提交者: puresky0

评论查看选项

选择您喜欢的显示评论的模式,并点击"保存设置"来激活您所做的改变。