钓鱼不打窝,钓的也不多
语言只靠看不行,还得练,下面是AI生成的一些题目,后续直接肝LeeCode,一举2得
1、猜数字
描述:创建一个简单的猜数字游戏,程序会随机生成一个数字,玩家需要猜出这个数字是多少。程序会给出提示,告诉玩家猜的数字是大了还是小了
usestd::cmp::Ordering;usestd::io::stdin;userand::{Rng};fnmain(){'outer:loop{let rand_number =rand::thread_rng().gen_range(1..=100);loop{println!("please input one number:");letmut guess =String::new();stdin().read_line(&mut guess).expect("error");let number =match guess.trim().parse::<i32>(){Ok(num)=> num,Err(_)=>{println!("please input number");continue;}};match number.cmp(&rand_number){Ordering::Less=>{println!("too small")}Ordering::Equal=>{println!("you win current number is {}", rand_number);break;}Ordering::Greater=>{println!("too big")}}}println!("you can choose 'y' to continue ");letmut flag =String::new();stdin().read_line(&mut flag).expect("input error");if!flag.trim().eq("y"){break'outer;}}println!("game over!")}
2、计算器
描述:编写一个简单的计算器程序,支持加法、减法、乘法和除法运算。用户输入两个数字和一个操作符,程序输出运算结果。
usestd::io::stdin;usestd::str::FromStr;/**
描述:编写一个简单的计算器程序,支持加法、减法、乘法和除法运算。用户输入两个数字和一个操作符,程序输出运算结果。
*/fnmain(){loop{// 输入数字letmut input_number =String::new();stdin().read_line(&mut input_number).expect("input error");let number =parse_number(&input_number);// 输入运算符letmut operator =String::new();stdin().read_line(&mut operator).expect("input error");// 输入数字2letmut input_number =String::new();stdin().read_line(&mut input_number).expect("input error");let number2 =parse_number(&input_number);// 计算match(number, number2){(Ok(n1),Ok(n2))=>{matchcalculate(n1, n2,&operator){Ok(data)=>println!("{}{}{}={}", n1, operator.trim(), n2, data),Err(e)=>println!("calc error {}", e)}}
_ =>println!("source number is none")}println!("you can choose 'n' to end ");letmut flag =String::new();stdin().read_line(&mut flag).expect("input error");if flag.trim().eq("n"){break;}}}/**
* 数据计算
*/fncalculate(number:f32, number2:f32, operator:&str)->Result<f32,&str>{match operator.trim(){"+"=>Ok(number + number2),"-"=>Ok(number - number2),"*"=>Ok(number * number2),"/"=>{if number2.abs()>f32::EPSILON{Ok(number / number2)}else{Err("denominator should not be zero")}}
_ =>Err("unsupported")}}/**
* 转换数字
*/fnparse_number<T:FromStr>(s:&str)->Result<T,T::Err>{
s.trim().parse::<T>()}
3、单词计数器
描述:编写一个程序,统计给定字符串中每个单词出现的次数。忽略大小写,输出结果按照单词出现次数从高到低排序。
代码还能优化一下
usestd::collections::HashMap;usestd::io::stdin;fnmain(){// 输入数字letmut map =HashMap::new();letmut input_string =String::new();stdin().read_line(&mut input_string).expect("input error");// 统计每个单词的出现次数for x in input_string.split_whitespace(){let count = map.entry(x.to_string()).or_insert(0);*count +=1;}letmut vec:Vec<_>= map.iter().collect();
vec.sort_by(|entry1,entry2| entry1.1.cmp(entry2.1).reverse());for(key, value)in vec {println!("{}={}", key, value)}}
4、斐波那契数列
描述:编写一个函数,生成指定长度的斐波那契数列。斐波那契数列的定义是:前两个数为 0 和 1,之后的每个数是前两个数之和。
提示:
- 使用递归或迭代 实现。
- 处理边界条件(如长度为 0 或 1 的情况)。
fnmain(){}pubfnfibonacci(num:i32)->i32{if num ==0|| num ==1{return num;}letmut dp =vec![0;(num +1)asusize];
dp[0]=0;
dp[1]=1;for i in2..=num asusize{
dp[i]= dp[i -1]+ dp[i -2];}
dp[num asusize]}#[cfg(test)]modtest{usesuper::*;#[test]fnvalidate(){assert_eq!(fibonacci(2),1);}}
5、最长单词
描述:编写一个函数,接受一个字符串的引用,并返回这个字符串中最长的单词。
fnmain(){}/**
* 解析最长单词
*/pubfnlong_word(s:&str)->i32{
s.trim().split_whitespace().max_by_key(|item| item.len()).map(|word| word.len()asi32).unwrap_or(0)}#[cfg(test)]modtest{usesuper::*;#[test]fnvalidate(){assert_eq!(long_word("if you see as i see /n if you world seek as i seek"),5);}}
6、矩形面积
描述:定义一个结构体 Rectangle,包含两个字段 width 和 height。为这个结构体实现一个方法 area,计算矩形的面积。
structRectangle{/*
* 宽
*/
width:i32,/*
* 高
*/
height:i32,}implRectangle{pubfnarea(&self)->i32{self.width *self.height
}}#[cfg(test)]modtest{usesuper::*;#[test]fnvalidate(){let rec =Rectangle{
width:3,
height:4,};assert_eq!(rec.area(),12)}}
7、多边形面积(方法和函数)
描述:定义一个枚举 Shape,包含 Circle、Square 和 Rectangle 三种形状。为每种形状实现一个方法 area,计算它们的面积。
usestd::f64::consts::PI;enumShape{Circle(f64),Square(f64),Rectangle(f64,f64),}implShape{pubfncall(&self)->f64{matchself{Shape::Circle(radius)=>PI* radius * radius,Shape::Square(side)=> side * side,Shape::Rectangle(w, h)=> w * h,}}}#[cfg(test)]modtest{usesuper::*;#[test]fnvalidate(){let rec =Shape::Rectangle(3.0,4.0);assert_eq!(rec.call(),12.0);let squ =Shape::Square(4.0);assert_eq!(squ.call(),16.0);let cir =Shape::Circle(3.0);assert_eq!(cir.call(),PI*3.0*3.0);}}
8、命令行参数解析
描述:编写一个程序,接受命令行参数并输出这些参数。例如,运行 cargo run arg1 arg2 arg3 应该输出 arg1 arg2 arg3。
usestd::env;fnmain(){let args:Vec<String>=env::args().collect();println!("print command line args: {}, {}, {}", args[1], args[2], args[3])}
命令行运行
cd /home/mztt/space/rust/hello-rust/src &&cargo run agr0 arg1 agr2
9、文件操作
描述:编写一个程序,读取一个文本文件的内容,并将其写入到另一个文件中。
10、多线程
描述:编写一个程序,启动多个线程,每个线程打印一个独特的消息。
本文转载自: https://blog.csdn.net/qq_42898087/article/details/139656110
版权归原作者 mztt3010 所有, 如有侵权,请联系我们删除。
版权归原作者 mztt3010 所有, 如有侵权,请联系我们删除。