HOTA - 2005-7-30 21:00:00
一个整数拆分成已知的一组数的和,可以不全取到。
(我的代码生成不了要的答案,需要高手帮忙优化更正一下)
#include <stdio.h>
#include <conio.h>
#define N 6
int a[N+1]={1,57,71,87,97,99,101};
int b[N+1],results=0,mole=580;
int back[N+1]={0};
int c[N+1][20]={0};
void Comout()
{ int i,j=0,k;
int d[N+1]={0};
for(i=1;i<=N;i++)
for(k=1;k<=N;k++) if( c[k]!=0){d=k;break;}
for (k=1;k<=N;k++) if(d[k]!=back[k]){j=1;break;}
if(j==1)
{ for(i=1;i<=N;i++)
if(d!=0)
{printf("{%d,%d}",a,d);back=d;}
results++;printf("\n");
}
}
void Searchans(int acidnum,int line)
{ int i,k;
if(acidnum>0)
{
for(i=1;i<=b[line];i++)
{ {c[line]=1;
mole-=a[line]*i;}
/*k=acidnum-i*/
if((k=acidnum-i)>=0)
{
Searchans(k,line+1);
{c[line]=0;
mole+=a[line]*i;}
Searchans(acidnum,line+1);
}
else
{ {c[line]=0;
mole+=a[line]*i;}
Searchans(acidnum,line+1);
break;
}
}
}
else if( mole==0) Comout();
}
void Find()
{ int i;
/* mole-=18;*/
for(i=1;i<=N;i++) b=mole/a;
}
void Finals()
{ printf("ans is :%d\n",results);}
void Getmole()
{ printf("please enter the mole:");
scanf("%d",&mole);
/*printf("mole is %d\n",mole);*/
}
void Making()
{ int i,j,k;
for(j=0;j<=N;j++)
for(i=b[j]+1;i<20;i++) c[j]=-1;
for(k=0;k<=N;k++)c[k][0]=-1;
}
void main()
{ int i,line,j;
clrscr();
/*Getmole();*/
Find();
Making();
for(j=1;j<=N;j++) if(b[j]!=0) {line=j;break;}
for(i=b[N];i<=b[1];i++) Searchans(i,line);
Finals();
}
HYPERTEXT - 2005-7-30 22:32:00
帮你顶!
我不太懂C,请问你想把一个整数写成多少个数的和的形式?
我想到的算法是,假如你想把43写成4个正整数和的形式,总共有四个循环,且循环套循环,
for (a=1,a<=43,a++)
for(b=1,b<=43,b++)
for(c=1,c<=43,c++)
for(d=1,d<=43,d++)
if(a+b+c+d=43)
{/*这里输出a,b,c,d四个数值,由于对相关语句格式语法不熟,就写注释了*/}
}}}}
/*不好意思,对C太生疏,所以模仿你的写法写了for和if语句,语法有不对的请见谅*/
HOTA - 2005-7-30 22:43:00
谢谢你。可是问题还是存在,我郁闷啊~~稳被导师骂了。
HYPERTEXT - 2005-7-30 22:47:00
我好像看懂了一小部分。。。我们用了一样的算法,不过你还声明了好几个函数,我看不懂。
HOTA - 2005-7-30 23:05:00
...........................
HYPERTEXT - 2005-7-30 23:08:00
请问阁下能说明一下吗?我想学...
怪物125号 - 2005-7-30 23:13:00
嵌套循环有点太那个了,如果总共有100个,我不昏菜才怪,应该有别的算法。想ing
HYPERTEXT - 2005-7-30 23:23:00
人想起来是很复杂……
但是电脑很快,人告诉电脑后,让电脑想,这便是编程的魅力……
这种嵌套没什么的。
HOTA - 2005-7-30 23:25:00
我昏倒啊,解决问题是关键~~我已经没有时间了。
拜托各位~~~~~~~~~~~~~~~~~~~
HYPERTEXT - 2005-7-30 23:27:00
所以我们才一直在帮你顶啊
HOTA - 2005-7-31 11:49:00
怎么没人顶啊,救命啊~~~
HOTA - 2005-7-31 22:28:00
没人顶,我自己顶个!!!
。。。。。。。。。。。。
拜托各位大侠了。。。。。
怪物125号 - 2005-7-31 23:05:00
引用: |
【HYPERTEXT的贴子】人想起来是很复杂…… 但是电脑很快,人告诉电脑后,让电脑想,这便是编程的魅力…… 这种嵌套没什么的。 ........................... |
如果我能让电脑自己写出来,我不会昏,但算法就完全变复杂了,速度也会慢;而如果自己写嵌套循环,一来昏菜,二来鬼才知道到执行的时候用户会要几层循环啊。
你最好把你的源码发上来,这个论坛会把排版弄乱,我看你的代码时又在昏菜,怎么看你的循环都没有嵌套。
,而且连编译都过不了:
像这个
void Comout()
{.....(d是一个int数组,而k是int)
for(k=1;k<=N;k++) if( c[k]!=0){
d=k;break;}.......
}
这个d=k肯定是过不去的嘛。晕,肯定又是论坛过滤了的问题
HOTA - 2005-8-1 9:14:00
我怎么不能上传附件啊,郁闷哦~~
能加我QQ联系吗?QQ上很清楚....
157283557,谢谢大侠们了..........
© 2000 - 2024 Rising Corp. Ltd.