专栏名称: 申龙斌的程序人生
分享可繁殖的知识与技能:GTD时间管理、读书心得、个人成长、财富自由之路
分享
今天看啥  ›  专栏  ›  申龙斌的程序人生

通过欧拉计划学Rust编程(第71题)

申龙斌的程序人生  · 公众号  · 程序员  · 2020-02-15 08:43

由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾。

刷完欧拉计划中的63道基础题,能学会Rust编程吗?

“欧拉计划”的网址: https://projecteuler.net

英文如果不过关,可以到中文翻译的网站: http://pe-cn.github.io/

这个网站提供了几百道由易到难的数学问题,你可以用任何办法去解决它,当然主要还得靠编程,编程语言不限,论坛里已经有Java、C#、Python、Lisp、Haskell等各种解法,当然如果你直接用google搜索答案就没任何乐趣了。

这次解答的是第71题:

https://projecteuler.net/problem=71


题目描述:

有序分数

考虑形如n/d的分数,其中n和d均为正整数。如果n < d且其最大公约数为1,则该分数称为最简真分数。

如果我们将d ≤ 8的最简真分数构成的集合按大小升序列出,我们得到:

1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8 可以看出2/5是3/7直接左邻的分数。

将所有d ≤ 1,000,000的最简真分数按大小升序排列,求此时3/7直接左邻的分数的分子。



解题过程:

这道题实在太简单,根据分母找到最接近3/7的分子就行了,直接上代码。

fn main() {
let mut max = 0.0;
let mut numerator = 0;
for d in 2..=1_000_000 { // 分母
let n = d * 3 / 7;
if n * 7 == d * 3 {
continue;
}
let q = (n as f64) / (d as f64);
if q > max {
max = q;
numerator = n;
//println!("{} / {} = {}", numerator, denom, q);
}
}
println!("{}", numerator);
}

--- END ---


我把解决这些问题的过程记录了下来,写成了一本《用欧拉计划学 Rust 编程》PDF电子书,请随意下载。

链接:https://pan.baidu.com/s/1NRfTwAcUFH-QS8jMwo6pqw

提取码:qfha

该PDF文件将来会不定期更新,可以在公众号后台回复“rust”,得到最新的下载链接。


历史文章:

学会10多种语言是种什么样的体验?

刷完欧拉计划中的63道基础题,能学会Rust编程吗?



今天看啥 -
本文地址:http://www.jintiankansha.me/t/pxpa8tQMH9