我正在跟随 excism rust track 学习,并遇到了一个问题(我对 rust 很新)。
这是一个用于计算整数的勾股数组函数:
或者说,如果它能正常工作的话就好了……
当前问题在于这行代码:
它说在解析
它应该把它们全部吐出来,放到一个包含数组
这是一个用于计算整数的勾股数组函数:
use std::collections::HashSet;
use rayon::prelude::*;
pub fn find(sum: u32) -> HashSet<[u32; 3]> {
let a_b_plus_c: Vec<(u32; 2)> = (1_u32..(sum / 3_u32)).into_par_iter()
.filter_map(|a| {
let b_plus_c: u32 = sum - a;
let whole_number_check: Option<u32> = (b_plus_c.pow(2) - a.pow(2)).checked_rem(b_plus_c * 2);
match whole_number_check {
Some(0) => Some((a, b_plus_c)),
Some(_) => None,
None => None,
}
}).collect::<Vec<(u32; 2)>>();
a_b_plus_c.into_par_iter().filter_map(|a, b_plus_c| {
let b: u32 = (b_plus_c.pow(2) - a.pow(2))/(b_plus_c * 2);
let c: u32 = b_plus_c - b;
match b {
b if b > a => [a, b, c]
_ => None,
}}
).collect::<HashSet<[u32; 3]>>();
}
或者说,如果它能正常工作的话就好了……
当前问题在于这行代码:
let a_b_plus_c: Vec<(u32; 2)> = (1_u32..(sum / 3_u32)).into_par_iter()
它说在解析
a_b_plus_c
类型时,它期望其中一种符号,但找到了 ;
。从我所看到的(不多),这是定义一个元素类型为 u32
的二元组向量的正确方式。
就像我说的,这是我的学习练习,如果有人能帮助我,我将感激详细的回答 :)
值得一提的是,这可能会对您评论我的代码有所帮助,这是数学:
a + b + c = sum
a² + b² = c²
Rearrange for b:
b = ((b + c)² - a²) / (2(b + c))
So, iterate through a to get b+c, since (b+c) = sum - a
Then solve the above equation to get a, b+c, and b
Confirm that a < b
Then solve for c:
c = (b + c) - b
它应该把它们全部吐出来,放到一个包含数组
a,b,c
的 HashSet 中。
(u32, u32)
,要么是[u32; 2]
。 - hellowu32
组成的数组。Vec 是一种类型
。 - hellow(u32, u32)
,因为编译器会为你推断类型。我建议你阅读这本书,因为似乎你缺少一些 Rust 的关键特性。尽管如此,祝你玩得愉快! - hellow