洛谷题单-入门2-分支结构(上)-rust

 注意: 这是用单元测试管理的 

/// P2433 【深基1-2】小学数学 N 合一
/// 超级大坑,C++估计是默认六位有效数字,输出格式必须得按照C++的来,但是题目里又不跟你说
#[test]
pub fn two_1(){
    // 代替命令行
    let input_string = "8".to_string();

    // 1 声明变量 并获取一行输入
    // let mut input_string = String::new();
    // std::io::stdin().read_line(&mut input_string).unwrap();

    match input_string.as_str().trim() {
        "1" => println!("I love Luogu!"),
        "2" => println!("{} {}", 6, 4),
        "3" => println!("{}\n{}\n{}\n", 3, 12, 2),
        "4" => println!("{:.3}", 500.0 / 3.0),
        "5" => println!("{}", 15),
        "6" => println!("{:.4}", ((6_i32.pow(2) + 9_i32.pow(2)) as f64).powf(0.5)), // powi powf sqrt
        "7" => println!("{}\n{}\n{}", 110, 90, 0),
        "8" => {
            let (pi, r) = (3.141593, 5);
            let r = r as f64;
            println!("{:.4}\n{:.4}\n{:.3}\n", 2.0 * pi * r, pi * r * r ,  4.0 / 3.0 * pi * r * r * r)
        }
        "9" => println!("{}", 22),
        "10" => println!("{}", 9),
        "11" => println!("{:.4}", 100.0 / 3.0),
        "12" => println!("{}\n{}", 13, 'R'),
        "13" => println!("{}", 16),
        "14" => println!("{}", 50),
        _ => {}
    }
}
/// P5709 【深基2.习6】Apples Prologue / 苹果和虫子
/// 就大不就小 判断0的情况 和避免掉负数的情况
#[test]
pub fn two_2(){
    // 代替命令行输入
    let input_string = "50 10 200".to_string();

    // 1 声明变量 并获取一行输入
    // let mut input_string = String::new();
    // std::io::stdin().read_line(&mut input_string).unwrap();

    // 2 空格分割后迭代成 vec
    let number_list: Vec<i32> =
        input_string
            .trim()
            .split_whitespace()
            .map(|s| s.parse().unwrap())
            .collect();
    // 3 获取变量
    let  (m, n, t) = (number_list[0], number_list[1], number_list[2]);
    // 4 判断 n 是不是为0 判断 苹果有没有被吃完 苹果吃完个数就大不就小
    if n != 0 {
        let eat_apple = if t % n == 0 { t / n  } else { t / n + 1 };
        let result = if m - eat_apple >= 0  {m - eat_apple} else { 0 };
        println!("{result}");
    } else {
        println!("0");
    }
}
/// P5710 【深基3.例2】数的性质
/// 只需要看前两个,就可以推断出后两个
#[test]
pub fn two_3(){
    // 代替命令行
    // let input_string:i32 = "12".to_string().parse().unwrap();

    // 1 声明变量并获取命令行
    let mut input_string = String::new();
    std::io::stdin().read_line(&mut input_string).unwrap();
    let input_string:i32 = input_string.trim().parse().unwrap();

    let (is_1, is_2) = (
        input_string % 2 == 0,
        input_string > 4 && input_string <= 12
    );
    let (a_think, b_think) = (
        if is_1 && is_2 { 1 } else { 0 },
        if is_1 || is_2 { 1 } else { 0 }
    );
    let (c_think, d_think) = (
        if !(a_think == 1) && b_think == 1 { 1 } else { 0 },// !要打括号!!!
        if !(b_think == 1) { 1 } else { 0 }
    );
    println!("{} {} {} {}", a_think, b_think, c_think, d_think);
}
/// P5711 【深基3.例3】闰年判断
/// 公式
#[test]
pub fn two_4(){
    // 代替命令行
    // let input_string:i32 = "1926".to_string().parse().unwrap();
    // 1 声明变量并获取命令行
    let mut input_string = String::new();
    std::io::stdin().read_line(&mut input_string).unwrap();
    let input_string:i32 = input_string.trim().parse().unwrap();

    let result =
        if (input_string % 100 == 0 && input_string % 400 == 0)
            ||
            (input_string % 4 == 0 && input_string % 100 != 0)
            { 1 } else { 0 };

    println!("{}", result);
}
/// P5712 【深基3.例4】Apples
/// 分支判断
#[test]
pub fn two_5(){
    // 代替命令行
    // let input_string:i32 = "3".to_string().parse().unwrap();

    let mut input_string = String::new();
    std::io::stdin().read_line(&mut input_string).unwrap();

    let eat_apple:i32 = input_string.trim().parse().unwrap();
    
    match eat_apple {
        0..=1 => {
            println!("Today, I ate {} apple.", eat_apple)
        }
        _ => {
            println!("Today, I ate {} apples.", eat_apple)
        }
    }
}
/// P5713 【深基3.例5】洛谷团队系统
/// 分支判断
#[test]
pub fn two_6(){
    // 代替命令行
    // let input_string:i32 = "50".to_string().parse().unwrap();

    let mut input_string = String::new();
    std::io::stdin().read_line(&mut input_string).unwrap();

    let number:i32 = input_string.trim().parse().unwrap();

    let result = if number < 6 { "Local" } else { "Luogu" };
    println!("{}", result);
}
/// P5714 【深基3.例7】肥胖问题
/// 分支判断
#[test]
pub fn two_7(){
    enum Status{
        Underweight,
        Normal,
        Overweight
    }
    pub struct Body {
        weight:f64,
        height:f64,
        pub bmi:f64
    }impl Body{
        fn new(weight:f64, height:f64) -> Body{
            Body{
                weight,
                height,
                bmi: 0_f64,
            }
        }
        fn status(&mut self)-> Status {
            self.bmi = self.weight / self.height.powi(2);

            if self.bmi < 18.5 {
                Status::Underweight
            } else if self.bmi >= 24.0 {
                Status::Overweight
            } else {
                Status::Normal
            }
        }

    }
    // 命令行代替
    let nums = vec![70_f64 ,1.72];
    // let mut input_string = String::new();
    // std::io::stdin().read_line(&mut input_string).unwrap();
    //
    // let nums:Vec<f64> = input_string.split_whitespace().map(|x| x.parse().unwrap()).collect();

    let mut body = Body::new(nums[0], nums[1]);

    match body.status() {
        Status::Normal => {
            println!("Normal")
        }
        Status::Underweight => {
            println!("Underweight")
        }
        Status::Overweight => {
            println!("{:.4}\nOverweight", body.bmi)
        }
    }
}
/// P5715 【深基3.例8】三位数排序
/// 内置就行
#[test]
pub fn two_8(){
    // 命令行替代
    let mut nums = vec![1, 14, 5];

    // let mut input_string = String::new();
    // std::io::stdin().read_line(&mut input_string).unwrap();
    // let mut nums:Vec<i32> = input_string.split_whitespace().map(|x| x.parse().unwrap()).collect();

    nums.sort();
    for i in nums {
        print!("{} ", i);
    }
}
/// P5716 【深基3.例9】月份天数
/// 2月判断闰年 其他只需要判断大小月
#[test]
pub fn two_9(){

    struct Date {
        year: i32,
        mouth: i32,
        is_leap: bool,
        day: i32
    }
    impl Date {
        fn new(year:i32, mouth:i32) -> Date{
            Date {
                year,
                mouth,
                is_leap: false,
                day: 0
            }
        }
        fn set_is_leap(&mut self){
            self.is_leap =
                if (self.year % 100 == 0 && self.year % 400 == 0)
                    || (self.year % 4 == 0 && self.year % 100 != 0) { true } else { false };
        }
        fn set_day(&mut self){
            match self.mouth {
                2 => {
                    match self.is_leap {
                        true => self.day = 29,
                        false => self.day = 28
                    }
                }
                1 | 3 | 5 | 7 | 8 | 10 | 12 => self.day = 31,
                _ => self.day = 30,
            }
        }
    }
    // 命令行替代
    let nums = vec![1926, 8];

    // let mut input_string = String::new();
    // std::io::stdin().read_line(&mut input_string).unwrap();
    // let nums:Vec<i32> = input_string.split_whitespace().map(|x| x.parse().unwrap()).collect();

    let mut date = Date::new(nums[0], nums[1]);

    date.set_is_leap();
    date.set_day();
    println!("{}", date.day);
}
/// P1085 [NOIP 2004 普及组] 不高兴的津津
/// 二维数组 超过8 才会不高兴
#[test]
pub fn two_10(){
    // 数据较多无命令行替代
    let mut week_act:Vec<Vec<i32>> = vec![];
    for _ in 1..=7 {
        let mut input_string = String::new();
        std::io::stdin().read_line(&mut input_string).unwrap();
        week_act.push(input_string.split_whitespace().map(|x| x.parse::<i32>().unwrap()).collect());
    }
    let mut week_add = vec![];
    for i in week_act.iter() {
        let count = i[0] + i[1];
        week_add.push(if count >= 8 { count - 8 } else { 0 })
    }
    let mut max = 0;
    let mut max_index = 0;
    for (index, &item) in week_add.iter().enumerate() {
        if max >= item {
            continue
        } else {
            max = item;
            max_index = index + 1;
        }
    }
    println!("{}", max_index)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值