鱼C论坛

 找回密码
 立即注册
查看: 7502|回复: 5

[学习笔记] [Rust 编程语言]练习题一

[复制链接]
发表于 2021-3-21 11:40:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 hrp 于 2021-3-21 12:22 编辑

初学摸索阶段,暴力求解
// ### 练习:
// 给定一系列数字,使用 vector
// 并打印这个列表的平均数(mean, average)、
// 中位数(排列数组后位于中间的值)和
// 众数(mode,出现次数最多的值;这里哈希函数会很有帮助)。

use std::collections::HashMap;

fn main() {
    let mut shuzi = vec![131, 36, 5, 5, 6, 4514, 6, 351];
    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[length / 2];
    // 求列表数和
    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)
}

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
Cool_Breeze + 2 + 2 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-24 16:33:56 | 显示全部楼层
Rust 是面向对象的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-24 17:27:06 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2021-3-24 16:33
Rust 是面向对象的吗?

有的说Rust是面向对象的,有的说不是,但面向对象的概念在Rust中是很容易实现的,只是方法不同,没有像其他语言的class这种常见的关键字而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-25 11:13:26 | 显示全部楼层
hrp 发表于 2021-3-24 17:27
有的说Rust是面向对象的,有的说不是,但面向对象的概念在Rust中是很容易实现的,只是方法不同,没有像其 ...

了解了。多学几门语言可以学到很多不同编程思想!很赞!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-30 11:37:49 | 显示全部楼层
Cool_Breeze 发表于 2021-3-24 16:33
Rust 是面向对象的吗?

Rust是一门面向程序员的语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-30 11:48:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 11:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表