Rust 练习(一)

  1. 从键盘接收一个整数,判断一下该整数是奇数还是偶数,如果是奇数,输出“odd",如果是偶数,输出“even”

example:

input:

20

output:

even

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut num: String = String::new();
 5    stdin().read_line(&mut num).expect("Failed to read line");
 6    let num: i32 = num.trim().parse().expect("Failed to parse number");
 7    if num % 2 == 0 {
 8        println!("even");
 9    } else {
10        println!("odd");
11    }
12}
  1. 从键盘输入一个代表年份的四位数,判断一下当前输入的年份是不是闰年,是闰年返回“is leap year”,不是闰年返回“is not leap year”

example:

input:

2024

output:

is leap year

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut year: String = String::new();
 5    stdin().read_line(&mut year).expect("Failed to read line");
 6    let year: i32 = year.trim().parse().expect("Failed to parse year");
 7    if year % 4 == 0 && year % 100 != 0 || year % 400 == 0 {
 8        println!("is leap year");
 9    } else {
10        println!("is not leap year");
11    }
12}
  1. 已知斐波那契数列的值依次为:1,1,2,5,8,13,21,34……

有斐波那契数列的公式为:

$$ F(n) = \frac{{\left( \frac{{1 + \sqrt{5}}}{2} \right)^n - \left( \frac{{1 - \sqrt{5}}}{2} \right)^n}}{{\sqrt{5}}} $$

试编写程序,输入一个n,可以得到斐波那契数列第n项的值。

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut n: String = String::new();
 5    stdin().read_line(&mut n).expect("Failed to read line");
 6    let n: f64 = n.trim().parse().expect("Invalid input");
 7    let result = fibonacci(n);
 8    println!("{}", result);
 9}
10
11fn fibonacci(n: f64) -> i32 {
12    let sqrt5 = 5.0f64.sqrt();
13    let phi = (1.0 + sqrt5) / 2.0;
14    let a = phi.powf(n);
15    let b = (1.0 - phi).powf(n);
16    let result = (a - b) / sqrt5;
17    result.round() as i32
18}
  1. 输入一个四位数,将四位数的每一位相加后输入结果。例如:

input:3478

output:22

input:1234

output:10

注:即 3 + 4 + 7+ 8 = 22;1+2+3+4=10

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut num: String = String::new();
 5    stdin().read_line(&mut num).expect("Failed to read line");
 6    let result: i32 = num
 7        .chars()
 8        .filter_map(|c| c.to_digit(10))
 9        .map(|d| d as i32)
10        .sum();
11    println!("{}", result);
12}
  1. 输入3个不相等的数字,并将三个数字整理成从大到小的顺序输出。

input:

6

7

2

output:

7 6 2

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut nums: Vec<i32> = Vec::new();
 5    for _ in 0..3 {
 6        let mut input = String::new();
 7        stdin().read_line(&mut input).expect("Failed to read line");
 8        let year: i32 = input.trim().parse().expect("Invalid input");
 9        nums.push(year);
10    }
11    nums.sort();
12    nums.reverse();
13    println!("{} {} {}", nums[0], nums[1], nums[2]);
14}
  1. 从键盘按照字母,数字,字母,数字的顺序输入4个数据,将字母和字母连接生成新的字符串,数字和数字做加法得到一个新数字,将字符串和数字组合成新的字符输出。 例如:

input:

a

5

b

7

output:

ab12

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut nums: Vec<i32> = Vec::new();
 5    for i in 0..4 {
 6        let mut input = String::new();
 7        stdin().read_line(&mut input).expect("Failed to read line");
 8        if i % 2 == 0 {
 9            let input: char = input.trim().parse().expect("Failed to parse input");
10            nums.push(input as i32);
11        } else {
12            let input: i32 = input.trim().parse().expect("Failed to parse input");
13            nums.push(input);
14        }
15    }
16    println!(
17        "{}{}{}",
18        nums[0] as u8 as char,
19        nums[2] as u8 as char,
20        nums[1] + nums[3]
21    );
22}
  1. 求一个四位数的digital root。Digital root是一个1位整数,它的计算方法如下:

The beginning number is 3498

The sum of its digits is 3+4+9+8=24

The number is now 24

The sum of its digits is 2+4=6

Digital root即为6

比如输入为:

3498

则输出为:

6

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut num = String::new();
 5    stdin().read_line(&mut num).expect("Failed to read line");
 6    let num: i32 = num.trim().parse().expect("Failed to parse number");
 7    let mut result = num;
 8    while result > 9 {
 9        result = digital_root(result);
10    }
11    println!("{}", result);
12}
13
14fn digital_root(num: i32) -> i32 {
15    num.to_string()
16        .chars()
17        .filter_map(|c| c.to_digit(10))
18        .map(|d| d as i32)
19        .sum()
20}
  1. 李姓家族有一笔¥100000的遗产分配。已知家族遗产管理者需要留存遗产的1.5%。遗产继承人由三部分组成:1.旁支亲属。每人可以继承剩余遗产份额的为1。2.子女。每人可继承剩余遗产的份额为100。3.配偶,可以继承剩余遗产份额为200.配偶为1人。

从键盘依次属于亲属的人数;子女数。

遗产份额根据能继承遗产的总数来计算。如:有一位亲属,一位子女,一位配偶,则遗产划分的份额为1+100+200=301,即可继承的遗产划分为301份。亲属1份,子女100份,配偶200份。

依次输出遗产管理者获得钱数;每名旁支亲属可以获取的钱数;每名子女可以获得的钱数;配偶可以获得的钱数。(钱数只能为整数,并且不允许四舍五入;配偶的钱为其他人取完之后剩余的所有钱数)

example:

input:

3

2

output:

1500 244 24400 48968

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut rel_num: String = String::new();
 5    let mut kid_num: String = String::new();
 6
 7    stdin().read_line(&mut rel_num).expect("Failed to read line");
 8    stdin().read_line(&mut kid_num).expect("Failed to read line");
 9
10    let rel_num: i32 = rel_num.trim().parse().expect("Invalid input");
11    let kid_num: i32 = kid_num.trim().parse().expect("Invalid input");
12
13    let mng: i32 = 15800;
14    let rest: i32 = 100000 - 1500;
15    let weight: i32 = rel_num * 1 + kid_num * 100 + 200;
16    let peow: f64 = (rest as f64) / (weight as f64);
17
18    let rel: i32 = peow.floor() as i32;
19    let kid: i32 = rel * 100;
20    let spo = rest - rel - kid;
21
22    println!("{mng} {rel} {kid} {spo}");
23}
  1. 鸡尾酒瓶由三个圆锥体部分组成。高度为 h,顶部和底部的半径为 r1 和 r2 的圆锥体的容积为 V 鸡尾酒瓶及容积计算公式如下所示。

$$ V = \pi\frac{(r_1^2 + r_1r_2 + r_2^2)h}{3} $$

试编写程序,输入鸡尾酒瓶的高度h和顶部底部的半径,计算鸡尾酒瓶的容积。

example:

input:

10

2

4

output:

293.21531433504737

 1use std::f64::consts::PI;
 2use std::io::stdin;
 3
 4fn main() {
 5    let mut h: String = String::new();
 6    let mut r1: String = String::new();
 7    let mut r2: String = String::new();
 8
 9    stdin().read_line(&mut h).unwrap();
10    stdin().read_line(&mut r1).unwrap();
11    stdin().read_line(&mut r2).unwrap();
12
13    let h: f64 = h.trim().parse().unwrap();
14    let r1: f64 = r1.trim().parse().unwrap();
15    let r2: f64 = r2.trim().parse().unwrap();
16
17    let v: f64 = (PI / 3.0) * (r1.powf(2.0) + r1 * r2 + r2.powf(2.0)) * h;
18
19    println!("{}", v);
20}
  1. 编写一个程序,以军用格式如(0900、1730)读取两个时间,并打印两个时间之间相差的小时和分钟数。

example:

input:

0900

1730

output:

8 hours 30 minutes

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut start_time = String::new();
 5    let mut end_time = String::new();
 6
 7    stdin().read_line(&mut start_time).unwrap();
 8    stdin().read_line(&mut end_time).unwrap();
 9
10    let start_minute: i32 = start_time.trim()[..2].parse::<i32>().unwrap() * 60
11        + start_time.trim()[2..].parse::<i32>().unwrap();
12    let end_minute: i32 = end_time.trim()[..2].parse::<i32>().unwrap() * 60
13        + end_time.trim()[2..].parse::<i32>().unwrap();
14
15    let duration_minute = end_minute - start_minute;
16
17    let result_minute = duration_minute % 60;
18    let result_hour = (duration_minute - result_minute) / 60;
19
20    println!("{result_hour} hours {result_minute} minutes");
21}
  1. 从键盘输入一个数字n,计算小于n的所有奇数的和。

input:

100

output:

2500

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut num = String::new();
 5    stdin().read_line(&mut num).unwrap();
 6    let num: i32 = num.trim().parse().unwrap();
 7    let mut result = 0;
 8    for i in 1..num {
 9        if i % 2 != 0 {
10            result += i;
11        }
12    }
13    println!("{result}");
14}
  1. 已知有公式 $S=\frac{1}{1^2}+\frac{1}{2^2}+\cdots+\frac{1}{n^2}+\cdots$,编写程序计算 S,要求加的最后一项值大于 $10^{-10}$,输出 S 的值。
1fn main() {
2    let mut sum: f64 = 0.0;
3    let mut n: f64 = 1.0;
4    while 1.0 / n.powf(2.0) > 1e-10 {
5        sum += 1.0 / n.powf(2.0);
6        n += 1.0;
7    }
8    println!("{sum}");
9}
  1. 输入一个数字,判断一下该数字是不是水仙花数(三位数)。

水仙花数:例如 $153=1^3+5^3+3^3$,即水仙花数。

input:

153

output:

Yes

input:

256

output:

No

input:

1234

output:

Out scope

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut num = String::new();
 5    stdin().read_line(&mut num).unwrap();
 6    if num.trim().len() != 3 {
 7        println!("Out of Scope");
 8        return;
 9    }
10    let a = num.trim()[0..1].parse::<i32>().unwrap();
11    let b = num.trim()[1..2].parse::<i32>().unwrap();
12    let c = num.trim()[2..3].parse::<i32>().unwrap();
13    let num = num.trim().parse::<i32>().unwrap();
14    if num == a.pow(3) + b.pow(3) + c.pow(3) {
15        println!("Yes");
16    } else {
17        println!("No");
18    }
19}
  1. 输入任意两个整数,输出他们的最大公约数和最小公倍数。

input:

6

9

output:

3 18

 1use std::io::stdin;
 2
 3fn gcd(a: i32, b: i32) -> i32 {
 4    if b == 0 {
 5        a
 6    } else {
 7        gcd(b, a % b)
 8    }
 9}
10
11fn lcm(a: i32, b: i32) -> i32 {
12    a * b / gcd(a, b)
13}
14
15fn main() {
16    let mut a = String::new();
17    let mut b = String::new();
18    stdin().read_line(&mut a).unwrap();
19    stdin().read_line(&mut b).unwrap();
20    let a: i32 = a.trim().parse().unwrap();
21    let b: i32 = b.trim().parse().unwrap();
22
23    let gcd = gcd(a, b);
24    let lcm = lcm(a, b);
25
26    println!("{gcd} {lcm}");
27}
  1. 从键盘接收两个数据,一个代表鸡和兔子的头数,一个代表,鸡和兔子的腿数。编写一个程序,计算有多少只鸡,多少只兔子。如果无解,则输出:No solution.

input:

35

94

output:

rabbit: 12 chicken: 23

input:

20

40

output:

only have chicken: 20

input:

15

60

output:

only have rabbit: 15

input:

10

100

output:

No solution

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut head = String::new();
 5    let mut leg = String::new();
 6
 7    stdin().read_line(&mut head).unwrap();
 8    stdin().read_line(&mut leg).unwrap();
 9
10    let head: i32 = head.trim().parse().unwrap();
11    let leg: i32 = leg.trim().parse().unwrap();
12
13    if leg == 4 * head {
14        println!("Only {head} rabbits.");
15        return;
16    } else if leg == 2 * head {
17        println!("Only {head} chickens.");
18        return;
19    } else if leg < 2 * head || leg > 4 * head || leg % 2 != 0 {
20        println!("No solution.");
21        return;
22    } else {
23        let tmp = leg - head * 2;
24        let rabbit = tmp / 2;
25        let chicken = head - rabbit;
26        println!("Rabbit: {}, Chicken: {}", rabbit, chicken);
27    }
28
29}
  1. 从键盘输入一个n的值,输出斐波那契数列的前n项。已知菲波那切数列的第一项和第二项都为1,其余项为: $f(n)=f(n-1)+f(n-2)$。

input:

5

output:

1 1 2 3 5

input:

2

output:

1 1

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut n = String::new();
 5    stdin().read_line(&mut n).unwrap();
 6    let n: usize = n.trim().parse().unwrap();
 7
 8    let mut fib = vec![1, 1];
 9    for i in 2..n {
10        fib.push(fib[i - 1] + fib[i - 2]);
11    }
12
13    let result = fib
14        .iter()
15        .map(|n| n.to_string())
16        .collect::<Vec<String>>()
17        .join(" ");
18    println!("{}", result);
19}
  1. “今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二”问物几何。出自——孙子算经。

(有一个数,不知道是多少,但是它除3余数是2,除5余数是3,除7余数是2,问这个数是多少?)

请输出满足条件的最小正整数:

 1fn main() {
 2    let mut num = 0;
 3    loop {
 4        if num % 3 == 2 && num % 5 == 3 && num % 7 == 2 {
 5            println!("{num}");
 6            break;
 7        } else {
 8            num += 1;
 9        }
10    }
11}
  1. 奇数偶数贩售机。创建一个程序,判断输入数据是奇数还是偶数, 并输出该数字后连续的9个奇数或偶数,例如:输入2,返回"Even"并输出2 4 6 8 10 12 14 16 18

输入1,返回"Odd"并输出1 3 5 7 9 11 13 15 17

input:

2

output:

Even

2 4 6 8 10 12 14 16 18

input:

3

output:

Odd

3 5 7 9 11 13 15 17 19

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut num = String::new();
 5    stdin().read_line(&mut num).unwrap();
 6    let num: i32 = num.trim().parse().unwrap();
 7
 8    if num % 2 == 0 {
 9        println!("Even");
10    } else {
11        println!("Odd");
12    }
13    let mut result: Vec<i32> = vec![];
14    for i in 0..9 {
15        result.push(num + i * 2);
16    }
17    println!(
18        "{}",
19        result
20            .iter()
21            .map(|n| n.to_string())
22            .collect::<Vec<String>>()
23            .join(" ")
24    );
25}
  1. 从键盘接收一个十进制整数,将十进制整数转换成二进制的形式输出。

example:

input:

11

output:

1011

input:

100

output:

1100100

1use std::io::stdin;
2
3fn main() {
4    let mut num = String::new();
5    stdin().read_line(&mut num).unwrap();
6    let num: i32 = num.trim().parse().unwrap();
7    println!("{}", format!("{:b}", num));
8}
  1. 编写一个程序,实现如下功能:从键盘读入一个数据n,输出一个n行n列的列表:对第i行和第j列位置,如果i和j的最大公约数是1(即i和j互素),则输出“*”号,其他位置输出“#”号。每打印n个符号后,换行输出新的符号。
 1example:
 2
 3Input:
 44
 5output:
 6****
 7*#*#
 8**#*
 9*#*#
10
11input:
127
13output:
14*******
15*#*#*#*
16**#**#*
17*#*#*#*
18****#**
19*###*#*
20******#
 1use std::io::stdin;
 2
 3fn gcd(a: i32, b: i32) -> i32 {
 4    if b == 0 {
 5        a
 6    } else {
 7        gcd(b, a % b)
 8    }
 9}
10
11fn main() {
12    let mut num = String::new();
13    stdin().read_line(&mut num).unwrap();
14    let num: i32 = num.trim().parse().unwrap();
15    for i in 0..num {
16        let mut row = String::new();
17        for j in 0..num {
18            if gcd(i + 1, j + 1) == 1 {
19                row.push('*');
20            } else {
21                row.push('#');
22            }
23        }
24        println!("{}", row);
25    }
26}
  1. 使用泰勒级数展开是计算正弦函数,展开式的最后一项精度不超过1e-10。其中正弦函数的展开式为:

$$ sinx=x-\frac{x^3}{3!}+\frac{x^5}{5!}-\cdots $$

从键盘输入一个x(x为浮点数),计算x的正弦函数,结果保留小数位数2位(此题不要纠结,数位精度不对也可认为正确)。

example:

input:

0.5

output:

0.48

input:

1

output:

0.84

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut x = String::new();
 5    stdin().read_line(&mut x).unwrap();
 6    let x: f64 = x.trim().parse().unwrap();
 7
 8    let mut n: f64 = 1.0;
 9    let mut sinx: f64 = 0.0;
10
11    loop {
12        let mut fac_n = 1.0;
13        for i in 1..(n + 1.0) as i32 {
14            fac_n *= i as f64;
15        }
16        if x.powf(n) / fac_n > 1e-10 {
17            if (n - 1.0) % 4.0 == 0.0 {
18                sinx += x.powf(n) / fac_n;
19            } else {
20                sinx -= x.powf(n) / fac_n;
21            }
22        } else {
23            break;
24        }
25        n += 2.0;
26    }
27
28    println!("{:.2}", sinx);
29}
  1. 输入一个大于等于2的整数,判断其是素数还是不是素数,是素数输出True,否则输出False。

input:

8

output:

False

input:

19

output:

True

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut num = String::new();
 5    stdin().read_line(&mut num).unwrap();
 6    let num = num.trim().parse::<i32>().unwrap();
 7
 8    println!("{}", is_prime(num).to_string());
 9}
10
11fn is_prime(n: i32) -> bool {
12    if n <= 1 {
13        return false;
14    } else if n == 2 {
15        return true;
16    } else {
17        for i in 2..(n as f64).sqrt() as i32 {
18            if n % i == 0 {
19                return false;
20            }
21        }
22        return true;
23    }
24}
  1. 从键盘读入一个数n,输出小于或等于n的所有素数的个数。

example

input:

100

output:

25

input:

200

output:

46

 1use std::io::stdin;
 2
 3fn is_prime(n: i32) -> bool {
 4    if n <= 1 {
 5        return false;
 6    } else if n == 2 {
 7        return true;
 8    } else {
 9        for i in 2..(n as f64).sqrt() as i32 + 1 {
10            if n % i == 0 {
11                return false;
12            }
13        }
14        return true;
15    }
16}
17
18fn main() {
19    let mut count = 0;
20    let mut num = String::new();
21    stdin().read_line(&mut num).expect("Failed to read line");
22    let num: i32 = num.trim().parse().expect("Failed to parse number");
23
24    for i in 2..num + 1 {
25        if is_prime(i) {
26            count += 1;
27        }
28    }
29
30    println!("{count}");
31}
  1. 从键盘输入一个正整数n,输出小于n的所有与其互素的数的个数。(即求(n)的值)。例如:与10互素的数为:9,7,3,1一共4个。

example:

input:

10

output:

4

input:

9

output:

6

 1use std::io::stdin;
 2
 3fn gcd(a: i32, b: i32) -> i32 {
 4    if b == 0 {
 5        return a;
 6    }
 7    return gcd(b, a % b);
 8}
 9
10fn main() {
11    let mut count = 0;
12    let mut num = String::new();
13    stdin().read_line(&mut num).expect("Failed to read line");
14    let num: i32 = num.trim().parse().expect("Failed to parse number");
15
16    for i in 1..num {
17        if gcd(i, num) == 1 {
18            count += 1;
19        }
20    }
21
22    println!("{count}");
23}
  1. 从键盘接受一个正整数n,生成一个由1~n的数组。输出一个数组,数组中的每个元素为与前面数组中小于自身的互素的数的个数。

example:

input:

10

output:

[0, 1, 2, 2, 4, 2, 6, 4, 6, 4]

input:

20

output:

[0, 1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8, 16, 6, 18, 8]

 1use std::io::stdin;
 2
 3fn gcd(a: i32, b: i32) -> i32 {
 4    if b == 0 {
 5        return a;
 6    }
 7    return gcd(b, a % b);
 8}
 9
10fn judge(n: i32) -> i32 {
11    let mut result = 0;
12    for i in 0..n {
13        if gcd(i, n) == 1 {
14            result += 1;
15        }
16    }
17    return result;
18}
19
20fn main() {
21    let mut num = String::new();
22    stdin().read_line(&mut num).expect("Failed to read line");
23    let n: i32 = num.trim().parse().expect("Failed to parse input");
24
25    let mut result: Vec<i32> = Vec::from([0]);
26    for i in 2..n + 1 {
27        result.push(judge(i));
28    }
29
30    println!("{result:?}");
31}
  1. 从键盘输入一个n,打印一个等腰三角形。
 1input:
 24
 3output:
 4   *
 5  ***
 6 *****
 7*******
 8
 9input:
107
11output:
12      *
13     ***
14    *****
15   *******
16  *********
17 ***********
18*************
 1use std::io::stdin;
 2
 3fn main() {
 4    let mut n = String::new();
 5    stdin().read_line(&mut n).expect("Failed to read line");
 6    let n: i32 = n.trim().parse().expect("Failed to parse input");
 7
 8    let asterisk: &str = "*";
 9    let space: &str = " ";
10
11    for i in 1..n + 1 {
12        println!(
13            "{}{}",
14            space.repeat((n - i) as usize),
15            asterisk.repeat((2 * i - 1) as usize)
16        )
17    }
18}
  1. 从键盘输入一个n,打印如下图形。
 1input:
 24
 3output:
 4   *
 5  ***
 6 *****
 7*******
 8 *****
 9  ***
10   *
11
12input:
133
14output:
15  *
16 ***
17*****
18 ***
19  *
 1use std::io::stdin;
 2
 3fn main() {
 4    let mut n = String::new();
 5    stdin().read_line(&mut n).expect("Failed to read line");
 6    let n: i32 = n.trim().parse().expect("Failed to parse input");
 7
 8    let asterisk: &str = "*";
 9    let space: &str = " ";
10
11    for i in 1..n + 1 {
12        println!(
13            "{}{}",
14            space.repeat((n - i) as usize),
15            asterisk.repeat((2 * i - 1) as usize)
16        )
17    }
18
19    for i in (1..n).rev() {
20        println!(
21            "{}{}",
22            space.repeat((n - i) as usize),
23            asterisk.repeat((2 * i - 1) as usize)
24        )
25    }
26}
  1. 从键盘接收一个n,用来确定数组包含的元素个数。并循环读入n个数字字符,将其转换成int型数据,存储在数组中。编写一个程序,让数组中,相邻的两位进行比较,并将比较大的数字交换到后面的位置,将数组中相邻的两位依次比较,确保经过一轮比较后,数组中最大的数字放在索引为n-1的位置上。输出此时最大值在索引最大位置上的数组。

example:

input:

5

3

7

6

4

2

output:

[3, 6, 4, 2, 7]

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut n = String::new();
 5    stdin().read_line(&mut n).expect("Failed to read line");
 6    let n: i32 = n.trim().parse().expect("Failed to parse input");
 7
 8    let mut nums: Vec<i32> = Vec::new();
 9    for _ in 0..n {
10        let mut k = String::new();
11        stdin().read_line(&mut k).expect("Failed to read line");
12        let k: i32 = k.trim().parse().expect("Failed to parse input");
13        nums.push(k);
14    }
15
16    for i in 0..n - 1 {
17        if nums[i as usize] > nums[(i + 1) as usize] {
18            nums.swap(i as usize, (i + 1) as usize);
19        }
20    }
21
22    println!("{:?}", nums)
23}
  1. 从键盘接收一个n,代表当前数组中包含的元素个数。依次从键盘读入n个数据,并转换成int型,保存在数组中。按照上题的方法整理数组中的元素,将数组中元素整理为从小到大有序的数组输出。(注:不允许使用内置的排序函数,或方法)

input:

5

3

7

6

4

2

output:

[2, 3, 4, 6, 7]

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut n = String::new();
 5    stdin().read_line(&mut n).expect("Failed to read line");
 6    let n: i32 = n.trim().parse().expect("Failed to parse input");
 7
 8    let mut nums: Vec<i32> = Vec::new();
 9    for _ in 0..n {
10        let mut k = String::new();
11        stdin().read_line(&mut k).expect("Failed to read line");
12        let k: i32 = k.trim().parse().expect("Failed to parse input");
13        nums.push(k);
14    }
15
16    for i in 0..n - 1 {
17        for j in i + 1..n {
18            if nums[i as usize] > nums[j as usize] {
19                nums.swap(i as usize, j as usize);
20            }
21        }
22    }
23
24    println!("{:?}", nums);
25}
  1. 从键盘接收一个m,代表二维数组的行数,再从键盘接收一个n,代表二维数组的列数。利用循环读入二维数组所有的数值,并转换为int类型,存在数组中。输出该二维数组。

example:

input:

2

3

1

4

7

2

5

8

output:

[[1, 4, 7], [2, 5, 8]]

 1use std::io::stdin;
 2
 3fn main() {
 4    let mut row = String::new();
 5    let mut col = String::new();
 6
 7    stdin().read_line(&mut row).expect("Failed to read row");
 8    stdin().read_line(&mut col).expect("Failed to read col");
 9
10    let row: i32 = row.trim().parse().expect("Invalid row input");
11    let col: i32 = col.trim().parse().expect("Invalid col input");
12
13    let mut mat: Vec<Vec<i32>> = Vec::new();
14    let mut input = String::new();
15
16    for _i in 0..row {
17        let mut row_vec: Vec<i32> = Vec::new();
18        for _j in 0..col {
19            input.clear();
20            stdin().read_line(&mut input).expect("Failed to read input");
21            let num: i32 = input.trim().parse().expect("Invalid input");
22            row_vec.push(num);
23        }
24        mat.push(row_vec);
25    }
26
27    println!("{:?}", mat);
28}

相关系列文章