Rust语言编程例子 第021题:猴子吃桃

Rust语言编程题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下,的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。请使用循环和递归两种方式解决此问题

程序分析:采取逆向思维的方法,从后往前推断。

  1. 设x1为前一天桃子数,设x2为第二天桃子数, 则:

x2=x1/2-1, x1=(x2+1)*2

x3=x2/2-1, x2=(x3+1)*2

以此类推: x前=(x后+1)*2

  1. 从第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比,请编程序找出三队 ...