杭电1258,求助,一直wa,不知道哪里错了
#include<stdio.h>#include<stdlib.h>intcmp(constint*a,constint*b){return*(int*)b-*(int...
#include<stdio.h>
#include<stdlib.h>
int cmp(const int *a,const int *b)
{
return *(int *)b-*(int *)a;
}
long a[12],b[12],d[12],n,t,flag,flag1;
void dfs(long i,long j,long c)
{
long x;
if(c+a[i]==t)
{
flag=1;
if(b[j]!=a[i])
{
b[j]=a[i];
for(x=0;x<j;x++)
printf("%ld+",b[x]);
for(x=0;x<j;x++)
d[x]=b[x];
printf("%ld\n",a[i]);
}
else
{
b[j]=a[i];
for(x=0,flag1=0;x<j;x++)
if(d[x]!=b[x])
{
flag1=1;
}
if(flag1==1)
{
for(x=0;x<j;x++)
printf("%ld+",b[x]);
for(x=0;x<j;x++)
d[x]=b[x];
printf("%ld\n",a[i]);
}
}
if(i+1<n)
dfs(i+1,j,c);
}
else if(c+a[i]>t&&i+1<n)
{
dfs(i+1,j,c);
}
else if(c+a[i]<t&&i+1<n)
{
if(j==0&&a[j]!=b[j])
{
b[j]=a[i];
dfs(i+1,j+1,c+a[i]);
}
else if(b[j]!=a[i])
{
b[j]=a[i];
dfs(i+1,j+1,c+a[i]);
}
else
{
for(x=0,flag1=0;x<j;x++)
if(d[x]!=b[x])
{
flag1=1;
}
if(flag1==1)
{
b[j]=a[i];
dfs(i+1,j+1,c+a[i]);
}
}
dfs(i+1,j,c);
}
}
int main()
{
long i,j;
while(scanf("%ld%ld",&t,&n)!=EOF&&(t!=0||n!=0))
{
for(i=0;i<12;i++)
b[i]=0;
for(i=0;i<n;i++)
scanf("%ld",&a[i]);
qsort(a,n,sizeof(a[0]),cmp);
printf("Sums of %ld:\n",t);
flag=0;
dfs(0,0,0);
if(flag==0)
{
printf("NONE\n");
}
}
return 0;
} 展开
#include<stdlib.h>
int cmp(const int *a,const int *b)
{
return *(int *)b-*(int *)a;
}
long a[12],b[12],d[12],n,t,flag,flag1;
void dfs(long i,long j,long c)
{
long x;
if(c+a[i]==t)
{
flag=1;
if(b[j]!=a[i])
{
b[j]=a[i];
for(x=0;x<j;x++)
printf("%ld+",b[x]);
for(x=0;x<j;x++)
d[x]=b[x];
printf("%ld\n",a[i]);
}
else
{
b[j]=a[i];
for(x=0,flag1=0;x<j;x++)
if(d[x]!=b[x])
{
flag1=1;
}
if(flag1==1)
{
for(x=0;x<j;x++)
printf("%ld+",b[x]);
for(x=0;x<j;x++)
d[x]=b[x];
printf("%ld\n",a[i]);
}
}
if(i+1<n)
dfs(i+1,j,c);
}
else if(c+a[i]>t&&i+1<n)
{
dfs(i+1,j,c);
}
else if(c+a[i]<t&&i+1<n)
{
if(j==0&&a[j]!=b[j])
{
b[j]=a[i];
dfs(i+1,j+1,c+a[i]);
}
else if(b[j]!=a[i])
{
b[j]=a[i];
dfs(i+1,j+1,c+a[i]);
}
else
{
for(x=0,flag1=0;x<j;x++)
if(d[x]!=b[x])
{
flag1=1;
}
if(flag1==1)
{
b[j]=a[i];
dfs(i+1,j+1,c+a[i]);
}
}
dfs(i+1,j,c);
}
}
int main()
{
long i,j;
while(scanf("%ld%ld",&t,&n)!=EOF&&(t!=0||n!=0))
{
for(i=0;i<12;i++)
b[i]=0;
for(i=0;i<n;i++)
scanf("%ld",&a[i]);
qsort(a,n,sizeof(a[0]),cmp);
printf("Sums of %ld:\n",t);
flag=0;
dfs(0,0,0);
if(flag==0)
{
printf("NONE\n");
}
}
return 0;
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询