您的位置:首页 > 其它

输入正整数t,n,然后是n个正整数(单调非递增),若n个数中某几个数的和是t,输出这些加法表达式(表达式不重复输出),无解输出NONE

2015-11-25 18:15 429 查看
输入:

4 7 4 4 3 2 2 1 1

输出:

Sum of 4:

4

3+1

2+2

2+1+1

输入:

5 3 2 1 1

输出:

sum of 5:

NONE

#include<stdio.h>

int a[100],b[100],c[100],sum[100];

int n,t,ans,last;

//bool tr;

void dfs(int s,int tt,int x)

{

int i;

if(x>t)

return;

if(t-x>sum[tt])

return;

if(x==t)

{

ans++;

for(i=0;i<tt-1;i++)

printf("%d+",b[i]);

printf("%d\n",b[i]);

last=b[i];

return;

}

for(i=s;i<n;i++)

{

if((tt==0)&&(c[a[i]]!=0))

continue;

if(tt==0)

c[a[i]]=1;

if(last==a[i])

continue;

b[tt]=a[i];

dfs(i+1,tt+1,x+a[i]);

b[t]=0;

if(t==0)

c[a[i]]=0;

}

}

int main()

{

int i;

scanf("%d%d",&t,&n);

for(i=0;i<n;i++)

scanf("%d",&a[i]);

for(i=n-1;i>=0;i--)

sum[i]=sum[i+1]+a[i];

dfs(0,0,0);

if(ans==0)

{

printf("NONE");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: