
程序代码:
#include<stdio.h>
void sum_n(int *pres,int *pfm,int n,int i);
void generate(int *pres,int *ptemp,int *pfm,int n,int i_n,int i);
int test(int *ptemp,int i_n);
void to_res(int *ptemp,int *pres,int i,int add_minus_n);
int main()
{
  int n,fm[100],res[95051],i,sum=0;
  int *pfm;
  for(i=0;i<95051;i++) {res[i]=0;}
  pfm=fm;
  printf("Input:\n");
  scanf(" %i",&n);
  if((n<1)||(n>100)) {puts("error!");}
  for(i=0;i<n;i++)
  {
   scanf(" %i",pfm+i);
   if((*(pfm+i)<1)||(*(pfm+i)>1000)) {puts("error!");}
  }
  if(n==1){printf("1\n");}
  else
  {
   for(i=2;i<=n;i++)
   {
    sum_n(res,pfm,n,i);
   }
   for(i=0;i<n;i++)
   {
    res[*(pfm+i)]+=1;
   }
   for(i=0;i<95051;i++)
   {
   if(res[i]!=0) {sum+=1;}
   }
   printf("Output:\n%i\n",sum);
  }
  return 0;
}
/////////////////////////////////////////////////////////////
void sum_n(int *pres,int *pfm,int n,int i)
{
 int temp[100];
 generate(pres,temp,pfm,n,0,i);
}
/////////////////////////////////////////////////////////////
void generate(int *pres,int *ptemp,int *pfm,int n,int i_n,int i)
{
 int ctr;
 for(ctr=0;ctr<n;ctr++)
 {
  *(ptemp+i_n)=*(pfm+ctr);
  if((i_n!=0)&&(test(ptemp,i_n)==0)){continue;}
  if(i_n<i-1) {generate(pres,ptemp,pfm,n,i_n+1,i);}
  if(i_n==i-1)
  {
   to_res(ptemp,pres,i,0,0);
  }
 }
}
/////////////////////////////////////////////////////////////
int test(int *ptemp,int i_n)
{
 int i,res=1;
 for(i=0;i<i_n;i++)
 {
  if(*(ptemp+i)==*(ptemp+i_n))
  {
   res=0;
   break;
  }
 }
 return res;
}
/////////////////////////////////////////////////////////////
void to_res(int *ptemp,int *pres,int i,int add_minus_n,int sum)
{
 int add_minus,ctr;
 for(add_minus=0;add_minus<2;add_minus++)
 {
  if(add_minus==1)
  {
   sum-=*(ptemp+add_minus_n);
  }
  else
  {
   sum+=*(ptemp+add_minus_n);
  }
  if(add_minus_n<i)
  {
   to_res(ptemp,pres,i,add_minus_n+1,sum);
  }
  if(add_minus_n==i-1)
  {
   if(sum>=0) {*(pres+sum)+=1;}
  }
 }
}