1个算法问题
给你任意4个数字,比如1, 2, 3, 4,这任意几个数相加得结果一共10个结果.求任意一个结果对应哪几个数字相加.比如
1 = 1;
6 = 2 + 4, 6 = 1 + 2 + 3;
怎么写?
问题点数:0、回复次数:5Top
1 楼fflush(stdin)回复于 2003-11-02 17:52:46 得分 0
以前写过一个:用递归实现的,基本的方法是将给定的数拆成两个数(这两个数的和是给定的数),然后继续拆解新的两个数,不断这样下去,直到不能再拆解为止,这样就得到了一个序列。
Top
2 楼wangcheng22(wangcheng)回复于 2003-11-02 19:07:03 得分 0
main()
{
int a[4]={1,2,3,4},i,j;
for(i=0;i<4;i++)
for(j=3;j>=i;j--)
printf("%d=%d+%d\t",a[i]+a[j],a[i],a[j]);
}Top
3 楼yuantao(cfan)回复于 2003-11-02 21:15:07 得分 0
晕死,
就没人给个具体的算法吗?Top
4 楼0738111080(爱)回复于 2003-11-02 21:42:44 得分 0
程员书上有了
自己去看了
Top
5 楼fflush(stdin)回复于 2003-11-02 21:47:38 得分 0
/*Turboc2.0下通过
输入一个数,在文件中输出所有和为该数的子序列(包括自身)。
*/
#include<stdio.h>
int A[100];
long sep(int num,int low,int *p,FILE*fp);
void print(int *p,FILE*fp);
main()
{
int num;
int low=1;
long count;
if((fp=fopen("f:\\se.txt","a"))!=NULL) {
printf("please input a positive integer!\n");
do
scanf("%d",&num);
while(num<0);
fprintf(fp,"%d\n",num);
count=sep(num,low,A,fp);
printf("the total is %ld\n",count);
fclose(fp);
}
else printf("file error!");
}
void print(int *p,FILE*fp)
{ int *pi;
for(pi=A;pi<=p;pi++)
fprintf(fp,"%d ",*pi);
fprintf(fp,"\n");
}
long sep(int num,int low,int *p,FILE*fp)
{
static long c=1;
int i;
int up;
up=(num-1)/2;
for(i=low;i<=up;i++)
{ *(p++)=i;
*p=num-i;
print(p,fp);
c++;
if((*p-1)/2>i)
sep(num-i,i+1,p,fp);
p--;
}
return c;
}Top




