[Rust 编程语言]练习题一
本帖最后由 hrp 于 2021-3-21 12:22 编辑初学摸索阶段,暴力求解
// ### 练习:
// 给定一系列数字,使用 vector
// 并打印这个列表的平均数(mean, average)、
// 中位数(排列数组后位于中间的值)和
// 众数(mode,出现次数最多的值;这里哈希函数会很有帮助)。
use std::collections::HashMap;
fn main() {
let mut shuzi = vec!;
let (average, mid_num, mode_list) = solution(&mut shuzi);
println!(
"列表:{:?}\n中位数:{}\n众数:{:?}\n平均数:{}",
&shuzi, &mid_num, &mode_list, &average,
);
}
fn solution(list: &mut Vec<i32>) -> (f64, i32, Vec<i32>) {
// 排序
list.sort();
// 列表长度
let length = list.len();
// 中位数
let mid_num = list;
// 求列表数和
let sum: i32 = list.iter().sum();
// 求平均数
let average: f64 = sum as f64 / length as f64;
// 新建空哈希表用于储存列表中每个数字出现次数
let mut mode_m: HashMap<i32, u32> = HashMap::new();
// 新建可变变量max_count储存任意数字出现的最大次数
let mut max_count = 0;
// 新建一个储存众数的空列表
let mut mode_list: Vec<i32> = Vec::new();
// 遍历列表,计算数字出现次数
for i in list.clone() {
let count = mode_m.entry(i).or_insert(0);
*count += 1;
// 如果count大于等于max_count
if *count > max_count {
// 最大出现次数max_count更新为count
max_count = *count;
}
}
// 遍历list
for value in list {
// 当前数字出现次数count
let count = mode_m.get(value).unwrap();
// 如果当前数字出现次数等于max_count且mode_list中没有value
if (*count == max_count) && !mode_list.contains(value) {
// 则将该数字value加入众数列表mode_list
mode_list.push(*value);
}
}
// 返回结果,也可以写成 return (average, mid_num, mode_list);
(average, mid_num, mode_list)
}
Rust 是面向对象的吗? Cool_Breeze 发表于 2021-3-24 16:33
Rust 是面向对象的吗?
有的说Rust是面向对象的,有的说不是,但面向对象的概念在Rust中是很容易实现的,只是方法不同,没有像其他语言的class这种常见的关键字而已。 hrp 发表于 2021-3-24 17:27
有的说Rust是面向对象的,有的说不是,但面向对象的概念在Rust中是很容易实现的,只是方法不同,没有像其 ...
了解了。多学几门语言可以学到很多不同编程思想!很赞! Cool_Breeze 发表于 2021-3-24 16:33
Rust 是面向对象的吗?
Rust是一门面向程序员的语言{:5_90:} {:5_95:}
页:
[1]