首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

欧拉计划小结(6)

2012-06-22 
欧拉计划总结(6)好久不见了,我已经有多少天没更新project euler了。由于我还是大学生,所以身为大学生呢,不

欧拉计划总结(6)

好久不见了,我已经有多少天没更新project euler了。由于我还是大学生,所以身为大学生呢,不可避免的要做一件事情——应付期末考。所以那段时间呢,我都在为考试做复习,不得不说真的是四面楚歌,步步惊心啊。尼玛,什么考试都不懂,尤其是某一课(这里就不具体指出啦,避免被有心人发现,嘿嘿O(∩_∩)O~),都是背的,背着后面,忘记前面,复习前面,又忘记后面,背得哥头昏脑胀的。结果考试背的内容也没考到多少题目,坑爹呢,有木有!好吧,跟大家发下牢骚,接下来就开始这一次的欧拉计划总结啦。

  • problem 51:找出最小的能够通过改变同一部分得到八个质数的质数。老样子,一个求质数的子函数,然后设计一个求一个得出质数间最小差值的子函数。如例题给的13、23、43,最小差值就为10。主函数从i=100000开始循环到1000000,for嵌套循环j=1到10,a为最小差值,判断i+a*j是否为质数,是的话次数count++,知道j循环结束,判断count是不是为8,是的话answer就等于i,跳出循环,输出答案,不是的话继续循环,直到得出答案。
  • problem 52:找出最小的正整数x,使得x、2x、3x、4x、5x、6x都包涵同样的数字。设计一个求该数值各位数字,用整形数组表示的子函数,再设计一个求两个整形数组是否一致的子函数。主函数中,从i=2循环到100000,调用子函数,将i对应的各位数字转换成对应整形数组。for嵌套j=1循环到7,还是调用子函数,将j对应的各位数字转换成对应整形数组,再调用子函数,判断2个整形数组是否一致,如果不是,跳出j循环,是的话继续循环。循环结束后,判断j是不是=7,是的话answer=i,跳出循环,不是的话继续i循环。输出答案。
  • problem 53:对于1<=n<=100,C(n,r)有多少超过100W。首先知道一点, C(n,r)是对称的,即C(n,0)=C(n,n),所以只要判断到中间值,找出超过100W的个数*2倍就可得出答案了。设计子函数求最大公约数,设计一个子函数,求 C(n,r),这个子函数会调用求最大公约数的子函数,所以自己判断n从22开始就存在超过100W的数值了,所以从n=22开始循环到100,for嵌套循环r从0到n/2,调用求 C(n,r)的子函数,判断是不是超过100W,是的话answer=answer+n+1-2*r,跳出循环。输出答案。
  • problem 54:扑克牌游戏中,玩家1能赢几局。这道题目是我做的最蛋疼的题目,至少花了3天时间才真正做出来。定义个struct对应的有5张牌、颜色、连续的最大值、同色、2张最大值、3张最大值、4张最大值、单张最大手牌。设计6个子函数分别表示确认手牌,确认是否同色,确认是否连续,确认相同手牌,判断赢家,清除手牌属性。简而言之是,根据题目给的条件从同色—>连续—>四张牌—>三张牌 —>两张牌 —>一张牌进行比较大小,最终确定赢家是否为玩家1。
  • problem 55:10000以下有多少个Lychrel数。设计一个逆转相加的子函数,设计判断是否为回文数的子函数。answer初始化为9999,循环从i=1到10000,2个字符串清空,将i转换为字符串,且另一个字符串倒置。for嵌套j=0到50;调用逆转相加子函数,将两个字符串相加赋值给字符串num1,判断字符串num1是不是回文数,是的话answer-1,跳出循环,不是的话,复制num1到num2,num2倒置,继续循环判断。输出结果。
  • problem 56:对于形如a的b次方数字,找出最大的各位和。设计一个算次方的子函数且返回为各位数之和,设计一个算各位之和的子函数。answer初始化为0,主函数中for循环a=2到100,num数组置空,num[0]=1,调用算次方的子函数,返回值赋给temp判断answer是否<temp,是的话将temp赋值给answer。最后输出结果。
  • problem 57:考察2的平方根展开。设计一个判断分子位数是否超过分母位数的子函数,设计一个整形数组相加的子函数,设计一个整形数组赋值的子函数。主函数中for循环n=1到1000,调用判断两个整形数组分子位数是否超过分母位数,是的话answer++,不是的话继续,调用整形数组赋值给另一个整形数组d_val,调用整形数组相加,即分子与分母相加赋值给分母,分母跟d_val相加赋值给d_val,d_val赋值给分子。据需循环,输出结果。
  • problem 58:考察螺旋网格中对角线上质数的数量小于10%。一个判断质数的子函数。总数量count=1,质数prime=0,n表示每个对角线上的值,初始化为1,j=0为四个对角,i=2表示每个对角的差值。while循环d>0.1,n=n+i,count++,j++,判断n是否为质数,如果是,则prime++,不是的话继续,判断j%4==0,是的话i+=2,j=j%4,d=prime/count,直到循环结束,answer=i-1,输出结果。
  • problem 59:使用暴力破解,解开异或加密码。思路上的,用for循环c=a到z3次,然后跟数值异或,判断异或后最多字母的c,则这个单词c就是key,然后算出与这个key异或后的所有字符的ASCII值之和,输出结果。
  • problem 60:找出5个质数的集合,该集合中每两个质数相连接,都能产生一个素数。一个判断质数的子函数,一个判断连接质数后是否还是为质数的子函数。主函数中循环嵌套5次,代表5个质数的判断是否为质数,且两两相连是否也为质数。当条件满足的时候,answer等于5个质数之和,输出结果,结束程序。

    应该有20多天没更新project euler。这学期学java,本来想java是主流,应该要好好学的,可是不知道是我看那老师不爽呢,还是那老师是在教的太奇葩了,一共也就3节,一节上课,一节聊天,一节自习,搞得我真的不知道怎么学才好。于是乎,放着放着,就这么什么都不懂,什么都不清楚,还不如我自己自学的快、有效率呢!不过回去还得继续看java,以后说不准会搞这个吧。呵呵,希望各位牛人能给点意见哈!!

热点排行