| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2141 人关注过本帖
标题:[求助]我有一个程序,但我看不懂(C++)
只看楼主 加入收藏
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
乱得来有看头,不过我看不懂你不懂的地方是什么意思。
2004-07-28 17:33
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
以下是引用knocker在2004-07-28 16:22:49的发言:

这个问题的解是无穷的。

思路一:

例:3/7

3/7=1/7+1/7+1/7

=1/7+2/14+3/21

=1/7+1/14+1/14+1/21+1/21+1/21+1/21

=。。。。。

你的思路1我觉得不对劲。你这么分解总存在相同的加数,除非象你说的无穷,那不等于每解决吗?因为我要加数个数尽量小……

思路二我真的看不太懂……

大家再想想吧,体会一下,说不定会又意外的收获哦。


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-28 20:02
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

1. 我只是提供几种如何分解的思路,并不是针对你的问题的答案。

2. 我说的无穷的意思,不是此题的解无穷,而是拆分 (a/b) 有无穷解.

3. 第二种思路的实现代码(不是此问题的解答):

long int fun(long int n,long int N); main() { long int n,N;//即 : n / N long int a,b; long int f;

printf("请输入(n/N),n="); scanf("%ld",&n); printf("N="); scanf("%ld",&N); for(;;) { a=N/n+1; printf("1/%ld\n",a); b=N; N=N*a; n=n*a; a=N; n-=b; f=fun(n,N);// 求最大公约数 n/=f; N/=f; if(n==1){printf("1/%ld\n",N);break;} }

} long int fun(long int n,long int N) { int r; r=n % N; while(r!=0) { n=N; N=r; r=n%N; }

return N; }

4。 TO :LIVE41

此问题由楼主的题中:

首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越 好

引出的。即加数少的比加数多的好

我的意思就是 :

对于任意分数 a/b (a<b) 其最少的加数是多少?

只要

对任意分数 a/b (a<b), y= -bx / (b-ax) y 一定有个整数解

不能被证明是个假命题,那么,对于任意 a/b 楼主所谓的"加数"的最少个数 都是2个。

现在我就是对这个命题无法证明其是真命题还是假命题。

如果是真命题(我看着象是真的,但无法证明),那么,楼主给的示例的答案就是错的。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-07-28 20:34
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

Oh, i c! let me think about it.

think for a short time...

不是的,大哥你是错觉了,因为你用的是3/7,你尝试用楼主的19/45,留意:

此时是: y = bx / (ax - b) = 45x / (19x - 45) // x的最小值开始变化

先不讨论分子变化,看ax-b,这里只要b向正无穷大推进,而a向正无穷小推进, 那得到的就不是x随便取值,因此(2<= x <= 无穷大)是错误判断,而应该判断为,

对于x,存在一个数,只要在这个数的后面取整数x,使ax-45大于0才成立。

小弟我觉得原命题这样才为真,不对请指正!

[此贴子已经被作者于2004-07-29 00:28:34编辑过]

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

认真地看了一下,终于看懂knocker的意思了,这个想法不错,先确定搜索的范围,

但搜索你怎么实现呢?如果分数刚好不能分成两个,又怎么确定范围呢?还有都是分成N份如何保证最优解呢?

以上是我做这题时考虑的问题。大家可以思考一下。

或许有很多方法,我总相信——方法绝不会只有一个,大家可以放开自己的思路去想,找出属于自己的算法。


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-28 21:46
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用乌鸦丘比特在2004-07-28 21:46:14的发言:

但搜索你怎么实现呢?如果分数刚好不能分成两个,又怎么确定范围呢?还有都是分成N份如何保证最优解呢?

现在我只想求证:对于任意 a/b = 1/x + 1/y x,y一定有整数解

或者不一定有整数解

这样也就确定范围


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-07-28 22:34
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用live41在2004-07-28 21:08:38的发言:

Oh, i c! let me think about it.

think for a short time...

不是的,大哥你是错觉了,因为你用的是3/7,你尝试用楼主得19/45,留意:

此时是: y = bx / (ax - b) = 45x / (19x - 45) // x的最小值开始变化

先不讨论分子变化,看ax-b,这里只要b向正无穷大推进,而a向正无穷小推进, 那得到的就不是x随便,因为(2<= x <= 无穷大)是错误判断,而应该判断为,

对于x,存在一个数,只要在这个数的后面取整数x,使ax-45大于0才成立。

小弟我觉得原命题这样才为真,不对请指正!

你说的是对的。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-07-28 22:38
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

谢谢你的肯定。

2004-07-28 23:33
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

顶回去!这一题算法和实现都很难想得到,就算是对着算法,写代码也很难!

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

顶!楼上的是不是害怕了(开玩笑)

当你好好想想时,问题时不会难的。我的代码差不多50行,还不是很复杂。

[此贴子已经被作者于2004-07-30 16:56:41编辑过]


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-30 16:54
快速回复:[求助]我有一个程序,但我看不懂(C++)
数据加载中...
 
   



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

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