Rust语言编程例子 第021题:猴子吃桃
Rust语言编程题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下,的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。请使用循环和递归两种方式解决此问题。
程序分析:采取逆向思维的方法,从后往前推断。
- 设x1为前一天桃子数,设x2为第二天桃子数, 则:
x2=x1/2-1, x1=(x2+1)*2
x3=x2/2-1, x2=(x3+1)*2
以此类推: x前=(x后+1)*2
- 从第10天可以类推到第1天,是一个循环过程。
输出格式:猴子第一天总共摘了 {}个桃子
知识点:循环 递归
1、循环解法:
// 总共吃了N天 const N: i32 = 10; // 第N天早上剩余的数量 const COUNT: i32 = 1; fn main() { let mut i = N - 1; let mut xn = COUNT; while i > 0 { xn = (xn + 1) * 2; i -= 1; } println!("猴子第一天总共摘了 {} 个桃子", xn); }
程序执行结果:
猴子第一天总共摘了 1534 个桃子 Process finished with exit code 0
2、递归解法:
// 总共吃了N天 const N: i32 = 10; // 第N天早上剩余的数量 const COUNT: i32 = 1; fn main() { let pc = peach(1); println!("猴子第一天总共摘了 {} 个桃子", pc); } /// 递归求解总共摘了多少桃子 /// 遇到第N天,则返回第N天剩余的数量 fn peach(day: i32) -> i32 { if day == N { return COUNT; } return (peach(day + 1) + 1) * 2; }
程序执行结果:
猴子第一天总共摘了 1534 个桃子 Process finished with exit code 0
Rust语言编程题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队 ...