2009-01-15 16:38:16來源不明

2005 NPSC B. 節約尺

儲存所有可能,之後在去尋找。

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

  1. #include<stdio.h>      
  2. #include<stdlib.h>   
  3. #include<string.h>   
  4. main()   
  5. {   
  6.  int a,b,c,d=0,e,temp=0,sum=0,time=0,flag=0;   
  7.  int x[21],y[210];   
  8.  while(scanf("%d",&a)==1&&a!=0)   
  9.  {        
  10.   temp=0;sum=0;d=0;time=0;flag=0;    
  11.   for(b=0;b<a;b++)   
  12.    {       
  13.     scanf("%d",&c);   
  14.     x[b]=c;   
  15.     sum=sum+c;         /*將輸入的數字儲存*/  
  16.    }    
  17.   if(a!=sum)   
  18.    {      
  19.     for(b=d;b<a;b++)   
  20.      {   
  21.       temp=temp+x[b];   
  22.       y[time]=temp;   
  23.       if(b==a-1)   
  24.        {   
  25.         d++;b=d-1;temp=0;   
  26.        }   
  27.        time++;   
  28.      }   
  29.      b=1;   
  30.       for(e=0;e<=time;e++) /*尋找比對所有可能的值*/  
  31.        {   
  32.         if(y[e]==b)   
  33.          {   
  34.           flag++;   
  35.           y[e]=0;   
  36.           b++;   
  37.           e=-1;   
  38.          }   
  39.        }   
  40.          
  41.     if(flag==sum)   
  42.      printf("YES\n");   
  43.     else  
  44.      printf("NO\n");     
  45.    }   
  46.   else  
  47.    printf("NO\n");    
  48.  }       
  49.  return 0;        
  50. }