Rust周练习之 使用Rust计算平均数、中位数和众数

使用Rust计算平均数、中位数和众数

在这篇文章中,我们将展示如何使用Rust编程语言来计算一个整数列表的平均数、中位数和众数。让我们先看一下完整的代码,然后逐步解释每个部分的功能。

use std::collections::HashMap;

fn main() {
    // 定义一个包含整数的向量
    let mut v = vec![1, 2, 4, 5, 6];
    let lens = v.len();
    let mut num_size = 0;

    // 计算平均数
    for i in v.iter() {
        num_size += i;
    }
    println!("平均数: {}", num_size as f64 / lens as f64);

    // 计算中位数
    v.sort(); // 排序
    let median = if lens % 2 == 1 {
        // 如果是奇数,则中位数为中间那个数
        v[lens / 2]
    } else {
        // 如果是偶数,则中位数为中间两个数的平均值
        (v[lens / 2] + v[lens / 2 - 1]) / 2
    };
    println!("中位数: {}", median);

    // 定义一个新的向量用于计算众数
    let v = vec![1, 2, 4, 5, 6, 5];
    let mut scores = HashMap::new();

    for element in &v {
        *scores.entry(element).or_insert(0) += 1;
    }
    
    // 打印 HashMap 以验证结果
    for (key, value) in &scores {
        println!("{}: {}", key, value);
    }
    
    // 找到出现次数最多的元素(众数)
    let mut max_count = 0;
    let mut mode = None;

    for (key, count) in &scores {
        if *count > max_count {
            max_count = *count;
            mode = Some(*key);
        }
    }

    match mode {
        Some(key) => println!("众数: {}", key),
        None => println!("没有众数"),
    }
}

解释

计算平均数

首先,我们定义了一个包含整数的向量 v 并计算它的长度 lens。然后通过迭代向量中的每一个元素来累加它们的总和:

let mut num_size = 0;
for i in v.iter() {
    num_size += i;
}
println!("平均数: {}", num_size as f64 / lens as f64);

在打印平均数时,我们将总和 num_size 和长度 lens 转换为浮点数,以确保结果是一个浮点数。

计算中位数

接下来,通过对向量 v 进行排序来计算中位数:

v.sort();
let median = if lens%2 == 1 {
    v[lens / 2]
} else {
    (v[lens / 2] + v[lens / 2 - 1]) / 2
};
println!("中位数: {}", median);

如果向量的长度是奇数,中位数就是排序后中间的那个数。如果长度是偶数,中位数就是排序后中间两个数的平均值。

计算众数

为了计算众数,我们引入了一个新的向量 v 并使用 HashMap 来记录每个元素出现的次数:

let mut scores = HashMap::new();
for element in &v {
    *scores.entry(element).or_insert(0) += 1;
}

然后,我们输出 HashMap 来验证每个元素的出现次数:

for (key, value) in &scores {
    println!("{}: {}", key, value);
}

最后,通过遍历 HashMap 来找到出现次数最多的元素:

let mut max_count = 0;
let mut mode = None;
for (key, count) in &scores {
    if *count > max_count {
        max_count = *count;
        mode = Some(*key);
    }
}
match mode {
    Some(key) => println!("众数: {}", key),
    None => println!("没有众数"),
}

总结

通过上述步骤,我们成功计算出了一个整数列表的平均数、中位数和众数。这段代码展示了如何使用 Rust 进行基本的统计分析。希望这篇文章能够帮助你更好地理解 Rust 编程语言并应用于实际问题。如果你有任何问题或反馈,请随时留言。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值