1.穷举法<写于2004.9.28>(注:接...(一))
我给它下的定义就是将所有一定范围内得出结果值列出来,进行分析;最终得到我们需要的结果值. 例如:打印出四张扑克牌相加等于24的所有可能出现的集合. 分析:我们知道扑克牌为数字珠是1到9;只有4张牌;我们很快就知道它们之间组合就有9*9*9*9=6561种组合,我们可以利用FOR循环语句来实现.然后再用IF判断语句在6561种组合中逐一进行分析得出我们最终想要的结果值. 最后用编码实现如下: #include<stdio.h> {int ri=0,i,j,k,m; for(i=1;i<=9;i++) for(j=1;j<=9;j++) for(k=1;k<=9;k++) for(m=1;m<=9;m++) if(i+j+k+m==24) {++ri; printf("%d %d %d %d",i,j,k,m);} printf("总共有%d种组合",ri);}
2.辅助法<2004.9.28> 我给它下的定义是:为了实现某一特定的问题.常常需要增加一些看似无用却又必须增加的量来进行辅助;以最终得到想要的结果值.这种方法,就称为"辅助法". 例如:打印下列有规律的分数序列. 2/1,3/2,5/3,8/5.....
分析:细心的网友可能发现了该数列有一个比较明显的规律.后一个数的分母是前一个数的分子,而后一个数的分子是前一个数的分子与分母之和.刚开始,我看到这个题目的时候,我想利用"子函数"的方式来实现.但后来用伪代码进行分析,发现其实不需要那么麻烦。只需要在其中设制一个“辅助”的变量就可以了。我用trubo C编制的源代码如下: #include<stdio.h> main() {int i=1,j=1,k,m=2,n; printf("您想看到几个:"); scanf("%d",&n); for(k=1;k<=n;k++) {printf("%d/%d",m,j); i=m; m=m+j; j=i;} 大家可以对这个源程序直观的分析一下,会看出变量"i"的值好像是多余的;但是如果去掉它却是万万不可。可以说这道题如果不用一个辅助变量就很难实现。 假设一下,如果我们把其变量的值不要,改为: ....... m=m+j; j=m; ....... 那么,很显然是不对的,虽然,我们的想法是第二个分数的分母等于第一个分数的分子加分母;但是第二句"j=m;".本来,我们想得到的值是前一个分子的值.但是,m的值这时已经被重新定义了.所以,这样做个是完全错误的.(未完待续三)
---------------------------------------------------
个人主页:wwweye.126.com
QQ:4360538
---------------------------------------------------
[此贴子已经被作者于2004-10-05 22:50:18编辑过]