| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2678 人关注过本帖
标题:输入一个正整数N,要求满足题目条件
只看楼主 加入收藏
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
呵呵,这是我第一次这么耐心帮助别人,上面的程序应该没什么问题了
2010-10-25 19:39
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
发完上一面代码后才发现和8楼兄弟的算法思想相同,志同道合啊。只是让我不理解的是既然8楼想出要这么做,为什么还用了一段排序,还是冒泡这种排序算法里效率最差的?而你数组a里数字的顺序恰好是所求Q的各位数字的倒序,为什么不在一开始就把顺序排好?
其他人的代码太长,我也没去细看,下面就简要分析认证一下这一算法的正确性吧。

根据题目要求,Q的各位数字的乘积等于N,可以确定当N大于1时Q里不包含0和1。因为0乘以任何数得0,而1乘以任何数相当于没乘。
所以Q中只包含2到9。整个Q相当于对N进行因式分解后各因子的排列。为了使Q达到最小,那么要求将最大的因子排在权最低的位置。我想这就是各位对排序念念不忘的原因吧。
还有一点,为了使Q最小,还要尽量缩短Q的长度,也就是因子的数量。比如说因子中存在一个2和一个3,则用6代替它俩可以使Q进一步的减小。也就是说,合并其乘积小于10的因子。其实这样的可合并的情况并不多,只有2*2, 2*2*2, 2*3, 3*3这4种其值是4, 8, 6, 9。
所以,在做因式分解时只要从9到2进行偿试就可以得到可合并的最大的因子。如果当前分解尚未结束,那么下一个因子必然小于等于当前的因子。这一点可以用反证法证明,很简单,我就不在里费事了。

最后,讨论一下Q的存在性。
任何一个数字都可以表示成有限个素数的积。设将N分解成素数的积,其中最大的素数为P,则只要P<10,Q就存在,否则不存在与N对应的Q。理由及其证明很简单,我就不多说了。

以上就是我上面算法的理论基础。各位还有什么高见在下敬候,可以开拓一下思路

重剑无锋,大巧不工
2010-10-25 19:41
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
晕,我打字这么慢么?打字前还在第二页,点了发表回复就跑第三页了。
还是该说这里气氛热烈呢?

重剑无锋,大巧不工
2010-10-25 19:44
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
我打字也慢啊,学校电脑,直接用的系统输入法,那一段抱怨打了好半天
2010-10-25 20:02
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:1 

.其实编出来也许并不困难,但是编好不容易,编软件要符合结构化程序的基本原则,变量命名规范化,次序应有序化.....最主要是程序的可读性。
//这么早就有这么深刻的觉悟,膜拜。

[ 本帖最后由 BlueGuy 于 2010-10-25 20:49 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-10-25 20:39
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
yuanfeng1129, 你将来绝对是中国软件事业的领军人物, 相信我。/

[ 本帖最后由 BlueGuy 于 2010-10-25 20:48 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-10-25 20:42
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
看错了, 是说16楼, yuanfeng1129

我就是真命天子,顺我者生,逆我者死!
2010-10-25 20:47
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
以下是引用BlueGuy在2010-10-25 20:39:49的发言:


.其实编出来也许并不困难,但是编好不容易,编软件要符合结构化程序的基本原则,变量命名规范化,次序应有序化.....最主要是程序的可读性。
//这么早就有这么深刻的觉悟,膜拜。
谢谢,最开始接触这些东西的时候是在学计算机二级公共基础知识的时候,我听说二级有优秀之分,那时我将自己定义为优秀,一定要拿到优秀,不考90就和考60没区别了,我想证明自己,所以复习计算机二级很认真,其实二级C语言对我并不难,尽管我只认真学习过一个月,那段时间我经常一看书就是两点,那个时候看的是我们学校自己的书,很垃圾,所以很头痛,后来看了谭浩强的,才感叹相见恨晚,才知道最初若是用他的书我可以省很多时间,最开始学公共基础知识是在6月份,那时考试结束放假,由于公共基础知识实在枯燥乏味,再加上本人异常思念前女友,故看不进去,本打算回家学编程,结果在家待了一个月,整个7月一点没看,8月2号回来电子实习就抓紧时间开始复习,C语言用了一两天把知识补起来,后来又加强,研究了些底层的东西,也许正是因为自己研究过底层,所以现在看汇编觉得比较容易,不过电子实习搞完到开学的大部分时间还是浪费了,人一松散就不行了,时间紧的时候还蛮抓紧的,不过相比别人我是好的,我至少还在暑假学了点。
    记得为期十天的电子实习结束后就开始看公共基础,但是时间多,人也松散了,我那个时候发现公告基础看得懂了,看了两三天会了很多,公共基础知识包括算法和数据结构,程序设计基础,软件工程基础和数据库基础,当时虽然说有点概念,但是总是迷迷糊糊,比如软件工程啊,还有结构化程序设计和面向对象啊,那时根本不知道什么事面向对象,不过后来接触C++后才对面向对象有所理解,我觉得C语言向C++过度最困难的就是面向对象的理解,C++与C语言的区别以及C++的难度也就在这里,还有结构化程序设计的基本原则,以前只是背下来,软件设计过程包括:可行性研究与计划制定、需求分析、概要设计、详细设计、软件测试与调试,当时也是迷迷糊糊。我有这些觉悟完全是俄罗斯方块的功劳,最开始没想过研究这些,只想继续学好C++,再多接触一些语言,关于编程的书以及以前的计算机二级资料,我买了超过400元,其中也有一些盗版,还打印过40元的书,这表示了我的决心,曾经为准备考试打印过的东西也很多,记得以前最初一个月的时候,我打印的C语言资料合计500多张,几乎做完了上海大学全部历年考题,考试我是最快的,38分钟做完了,别人最快的也是我两倍时间,计算机二级我做完00-10年所有笔试,南开一百题笔试习题集全部习题,机试习题集全部习题,大部分都是考前做的,因为在暑假的时候我绝大多数时间是用来总结,搞清不懂的地方,那时我经常在我们学校论坛像高手请教,计算机二级笔试成功在38分钟做完,当时也没想到会那么快不过考前一天晚上老乡会喝醉了,还好考试时恢复了80%,在C语言上,我一向很优秀的,不然我也不会比别人块那么多,但是这次那人竟然那样,让我无法忍受,我装小白他还以为我真傻,什么都不知道,我这学期选了一门软件基础的课程,都是些新手小白混学分选的,但是老师出的大作业的确很蛋疼,竟然是要用面向对象的语言编写个棋类游戏,说也可以不是棋类游戏,也可以从网上找,看懂就行了,那个时候我开始着手进入游戏编程,刚开始是困难的,我要自己编出来,而不是下载别人的,现在想想,那老师也真是的,上课的一些人仅仅就学习过一个学期的C语言,我们一个学期是10星期,怎么可能编,你还要用面向对象,现在一般学生学个一学期也就能编个基本的,什么排序啊,最多就是一点字符串处理题目,函数很多都不会用,其实从初学者过来,最初我觉得函数是没必要的,但是后来随着程序的复杂,才发现函数是个好东西。
     我在9月底着手编写俄罗斯方块,当然也不是抓紧全部时间,因为人是松散的,况且我强迫症也发病过两次,浪费了些时间,而且我这个人有点抑郁,生活中没有多少笑容,唯一的笑容就是在计算机二级前的老乡会上,最初看俄罗斯方块源代码,我迷茫了,我最初是在图书馆借的一本C语言课程设计案例精编,看到代码,我迷茫了,长长的代码,但是结构很清晰,貌似是别人的毕业设计,我那个时候决定一点一滴研究。。。。。。
2010-10-26 01:11
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
这可以做我编写俄罗斯方块的感想了,俄罗斯方块的源代码我是在纸上写的,由于本人课业繁重,俄罗斯方块的代码和感想会在以后更新,我欢迎各位新手和小白向我请教一些基础的东西,感想先写这么多,我打算以后再编个DOS下的,然后将代码分享,同时加上一些注解,尽量用最好的算法,也希望各位能快点编出,俄罗斯方块让我体会到软件工程知识在其中的运用,也体会到结构化程序设计的基本原则,还有模块化的使用,就是定义一个个函数
2010-10-26 01:15
忧郁的C
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-10-26
收藏
得分:1 
新手路过,好长
2010-10-26 17:20
快速回复:输入一个正整数N,要求满足题目条件
数据加载中...
 
   



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

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