欧拉计划总结(1)

做到现在,欧拉计划的题目也已经做了10道了。老实说,在做的时候还是挺容易的,虽然有时候脑袋会卡壳,想很久,且我自己用的一直是VC的C语言,所以有时候明明思路是正确的,可以运行,但是答案就是错。但是通过相关查询,至少我对于VC这款软件的了解提升了很多了,例如VC的long只是32位,而当我们想要的位数比至少得64位的时候,long就不适用 ,但是windows下的VC不支持long long这种变量定义形式,只支持用_int64,而且在printf输出的时候不能用%lld的形式输出,只能用%I64d才能输出64位整形数值等等一些看似不重要,其实必须重视的细节,而我一般的问题很少是代码出错(可能是由于题目所需要的代码量比较少的缘故),大部分都是定义范围出错而导致的答案错误。
现在我就罗列出对于欧拉计划第1到第10道题目我自己的算法思路。
  • problem 1:对于这道题目,我想大部分的人跟我的想法都是一样的,用一个循环语句罗列出所有能被3或者能被5整除的小于1000的整数,且定义一个新的整形变量当所有罗列出来的整数之和,这道题目不难!
  • problem 2:这道题目,对于我来说,难点在于用两个变量保存第一个值和第二个值,所以用一个for循环语句定义两个整形变量i、j,初始化都为1,每一次的循环都是让i等于i+j、让j等于j+i,即后一个数值等于当前数值加上前一个数值,然后定义一个整形n保存所以i跟j能被2整除的所以整数之和。
  • problem 3:用_int64定义i=600851475143,然后用for语句循环,在循环内在设置因子j初始为2(可以为3),用while循环判断知道i能整除j,循环体内j++(也可以用j+=2,前提j=3),判断质数然后再用max判断最大的质数因子。
  • problem 4:用两个for嵌套,i、j初始化都为999(100也可以),设置一个是否为回文数的子函数,判断是否为回文数,是的话判断是否是最大回文数,是就赋值给整形max,不是继续循环到100(或999),求出的max为最终解。
  • problem 5:用int定义一个m初始化20跟19的最小公倍数,再用一个for语句循环,逐一求m跟18到1的最小公倍数再赋值给m,最后求出的m就是能被1到20的整数整除的最小数值。
  • problem 6:for循环,循环从1到100的所有自然数,squaressum代表先平方后求和,sumsquares代表先求和后平方,最后输出sumsquares-squaressum的值。
  • problem 7:用for循环且初始化i为5,count=2代表第二个质数,还是用prime子函数判断是否为质数,是的话count+1,不是的话继续循环,直到count=10001为止跳出,输出i的值。
  • problem 8:用for语句从第一位开始循环到第995位,因为该题目是求连续5位数相乘的最大数,所以当道995的时候也是最后一次5位数的求值了,在当前for语句中再嵌套一个for语句,用long k 记录连续5位数相乘后的值,再用max判断最大的乘值。
  • problem 9:用3个for循环,且初始化定义i=1000、j=i-1、k=j-1,这样也省去判断三个变量的大小关系,然后判断i、j、k相加是否为1000,且i*i是否等于j*j+k*k;不是就继续循环,是的话用一个整形保存i*j*k后的最大数。
  • problem 10:先用for语句循环验证所以小于2000000的整数,问题是验证是否为质数,我用一个prime函数进行验证,如果是质数就返回1,不是就返回0。在主函数中用if语句进行验证,这里要定义一个64位整形_int64定义sum,用double也可以,只是在printf函数输出形式%I64d改成%f就行。       

         以上是我这10到欧拉题目的算法思路,当然,所有的算法都不是唯一的,思路同样也是多种多样的。例如我在做problem 8的时候关于字符串的输入,有的人是先新建一个txt文本,将1000位数字复制到文本里,然后通过该C的文件流访问txt文本,从而达到快速输入字符串的问题。对于一些小细节,每个人总有每个人的想法,所以当我了解到自己与别人的差异时,也总会脑袋闪了一下,发出“哦,原来这样也行”的感叹。

        做了这10道题目,唯一的感觉就是很兴奋,也许正如一个博客牛人刘未鹏说的那样,一旦我开始编写程序几个小时之后,往往满脑子都是相关的东西,所有的知识都处在活跃状态,从而达到一种忘记时间流逝的“沉浸”状态(心理学上叫做“流体验”)。这也令我觉得不管是什么,至少我对编程是很感兴趣的,每次编程的时候,从遇到难题到解决难题,我总是能很专注于此,直到解决问题,我也总会情不自禁的打一个响指,叫了声“终于搞定了”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值