| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3132 人关注过本帖
标题:[思考][题目]算法需要你来注入
只看楼主 加入收藏
ythome
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-7-17
收藏
得分:0 
以下是引用神vLinux飘飘在2004-07-25 10:28:21的发言
程序算出了个数,但是没有具体列出结果,有没有方法具体列出结果。
2004-07-25 10:35
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

啊,题目并没有要求我们必须列出来啊,偷懒可是我的一大特长~

[此贴子已经被作者于2004-07-25 10:39:22编辑过]


淘宝杜琨
2004-07-25 10:38
ythome
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-7-17
收藏
得分:0 

对了,for(int .......) 是新的C标准中成立的,不必惊讶,如果不能运行那把这个int 单独写在外边就可以了。

你可以试试,结果绝对正确。

2004-07-25 10:40
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

的确正确!这个也可以算是一种算法吧

凡是能想出来的,我都向他致敬,我就没想到这个法子

[此贴子已经被作者于2004-07-25 10:49:55编辑过]


淘宝杜琨
2004-07-25 10:47
ythome
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-7-17
收藏
得分:0 

各位,不好意思,程序有点错误,我已经做了如下修改!上一个程序对k=2的情况有异常,会陷入死循环,我已经把

这个情况进行了解决。

请看如下程序,这回没有错误了!无限歉意!!!

#include <stdio.h> #include <stdlib.h>

main() { int n,k,result[6],t,t1; //6为分的最大值 //t,t1为临时计数变量 printf("请输入n,k(用逗号分开):"); scanf("%d,%d",&n,&k); for(t=0;t<k;t++) result[t]=1; if(n<=6||n>200||k<2||k>6) { printf("\n输入不满足条件!\n"); exit(0); }

result[k-1]=n-k+1; while(result[0]<=n/k) { if(k==2) { while(result[k-1]>=result[k-2]) { printf("输出:"); for(t=0;t<k;t++) { printf("%d ",result[t]); }//end for result[k-1]--; result[k-2]++; printf("\n"); }//end while break; } for(t1=k-3;t1>=0;t1--) { while(result[k-1]>=result[k-2]) { printf("输出:"); for(t=0;t<k;t++) { printf("%d ",result[t]); }//end for result[k-1]--; result[k-2]++; printf("\n"); }//end while result[t1]++; for(int d=t1;d<=k-2;d++) result[d]=result[t1]; //依次赋初值 int sum=0; for(int s=0;s<=k-2;s++) sum=sum+result[s]; result[k-1]=n-sum; //最高位计算赋值 } } return 0; }//end main()

//--------------------------四海为家作品---------

2004-07-25 12:44
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

我把自己的代码也贴出来吧,再WUN-TC下编译通过:

int count=0,k; /*count 为计数函数*/ void do1(int min,int max,int left,int c) /*递归函数*/ { int i,l,m;

if(c==1)count++ ;

else for(i=min;i<=max;i++) /*搜索范围是优化代码的关键*/

{l=left-i;m=l/(c-1);do1(i,m,l,(c-1));}} /*最小值为前一个数,最大值为剩下的数除以剩下的数字的个数*/ main() {int n,i=1,j=1;

while(i) {printf("Input the number\n"); scanf("%d",&n); if(n>6&&n<=200)i=0; else printf("The number must be bigger than 6 and smaller than 200!\n");}

while(j){ printf("Input the how many parts you want:\n"); scanf("%d",&k); if(k>=2&&k<=6)j=0; else printf("The part must be more than 2 and less than 6!\n");} do1(1,(n/k),n,k); printf("There are %d posibilities.",count);getch();}


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-25 14:19
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
谢谢,这样的帖子难得,请求加精!
2004-07-25 15:04
快速回复:[思考][题目]算法需要你来注入
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018335 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved