2009-05-06 22:13:32來源不明

加法減法的奧妙

作法:(1)多個for(暴力)(2)善用void

注意事項:我的寫法剛開始沒想到是n個數 只會有n-1個空格 所以才會n--; 所以上面的n為空格的個數唷


優先輸出順序為:' ' '+' '-'

/*************************************************************/

#include<stdio.h>
#include<stdlib.h>
int n,way[16]={0};
void make(int now)
{
 int a;
 if(now==n)
  {
   int sum=0;
   int temp[16]={0},top=1;
   temp[0]=1;
   for(a=0;a<n;a++)
    {
      if(way[a]==0) {
                     if(a+2>=10) {
                                  if(temp[top-1]>0)
                                  temp[top-1]=temp[top-1]*100+a+2;
                                  else
                                  temp[top-1]=temp[top-1]*100-a-2;
                                  }
                     else         {
                                  if(temp[top-1]>0)
                                  temp[top-1]=temp[top-1]*10+a+2;
                                  else
                                  temp[top-1]=temp[top-1]*10-a-2;
                                  }
                    }
      if(way[a]==1) {temp[top]=(a+2);top++;}
      if(way[a]==2) {temp[top]=(a+2)*-1;top++;}
    }
    for(a=0;a<top;a++)
     sum=sum+temp[a];
    if(sum==0)
    {
     printf("1");
     for(a=0;a<n;a++)
      {
       if(way[a]==0) printf(" ");
       if(way[a]==1) printf("+");
       if(way[a]==2) printf("-");
       printf("%d",a+2);
      }
       printf("\n");
     }
  }
 else
  for(a=0;a<3;a++)
    if(now+1<=n)
     {way[now]=a;make(now+1);}
}
main()
{
 while(scanf("%d",&n)==1)
  {
   n--;
   make(0);
  }
 return 0;
}

上一篇:Problem 47 HARD

下一篇:古代神祕文字