| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3132 人关注过本帖
标题:[思考][题目]算法需要你来注入
只看楼主 加入收藏
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

2004的方法也不错,实现我这道题的要求很有用,但如果要求打印结果的话……

所以还是觉得排序好。出这道题的目的就是想让大家多思考一下,体会一下好的算法,

好了如果需要的话我可以把自己的代码贴上来(如果那位兄弟想自己试试,我就先不贴了)


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-25 07:52
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

贴代码?不用了吧,不是都写出来了嘛


淘宝杜琨
2004-07-25 07:56
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

我要,小弟不才。如果神vLinux飘飘坚持不要,请发论坛信息形式给我吧,谢谢!

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

恩~一上线就闻到火药味

让我想想


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

//算法介绍:此程序用了一维数组来存储输出的变量,我首先找到了数字的分布规律 /*比如7 分成三分的组合有: 1 1 5 1 2 4 1 3 3 2 2 3 程序要保证数字没有重复,我采用了最末位的数组存储最大值,先位不能大于后一位 这样才保证了数字无重复。其次每计算一轮,我就把数组按规律初始化一遍,这样就 完成了。程序还有很多不完善,希望大家来进行修正。 */

#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) { 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 10:21
ythome
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-7-17
收藏
得分:0 
对了,我忘记了,我是在VC 环境下写的!
2004-07-25 10:25
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
以下是引用ythome在2004-07-25 10:21:49的发言:

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

一定是原创的吧~~呵呵


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

我也来贴一个

int n,k; long result=0; void recall(int x,int y,int g) { int i,m; for(i=g;i<=(x/(k+1-y));i++) { m=x-i; if(m>=i && y==k-1) result++; else if(y<k-1 && m>=i*(k-y)) recall(m,y+1,i); } }

main() { printf("\nPlease input n,k"); scanf("%d,%d",&n,&k); recall(n,1,1); printf("\n%d",result); } 

你看,用了递归就这么简单


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

我试过了,在TC下也运行正常!不知道楼主有没有源程序?如果有请发到我的邮箱里!ythome@eyou.com

我也参考对比一下。

2004-07-25 10:29
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
能通过吗?这样用for for(int d=t1;d&lt;=k-2;d++)  在TC里面也许是一种新的用法呢

淘宝杜琨
2004-07-25 10:34
快速回复:[思考][题目]算法需要你来注入
数据加载中...
 
   



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

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