首页 > 试题广场 >

吃糖果

[编程题]吃糖果
  • 热度指数:15160 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0)。 妈妈告诉名名每天可以吃一块或者两块巧克力。 假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。 例如: 如果N=1,则名名第1天就吃掉它,共有1种方案; 如果N=2,则名名可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有2种方案; 如果N=3,则名名第1天可以吃1块,剩2块,也可以第1天吃2块剩1块,所以名名共有2+1=3种方案; 如果N=4,则名名可以第1天吃1块,剩3块,也可以第1天吃2块,剩2块,共有3+2=5种方案。 现在给定N,请你写程序求出名名吃巧克力的方案数目。

输入描述:
输入只有1行,即整数N。


输出描述:
可能有多组测试数据,对于每组数据,
输出只有1行,即名名吃巧克力的方案数。
示例1

输入

4

输出

5
import java.util.Scanner;

public class Main{

     public static int f(int n){
        if (n==1) return 1;
        if (n==2) return 2;
         int result=0;
        if(n>=3){
           result=f(n-1)+f(n-2); 
        }
         return result;
    }
    public static void main(String[] args){
     
    Scanner scanner = new Scanner(System.in);
    int n= scanner.nextInt();
    int result=f(n);
    System.out.println(result);
}
}
    
发表于 2020-03-24 22:19:07 回复(0)
Java解法,动态规划
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] record =new int[21];
        record[1]=1;
        record[2]=2;
        for (int i = 3; i <= n; i++) {
            record[i]=record[i-1]+record[i-2];
        }
        System.out.println(record[n]);
    }
}

发表于 2020-03-06 10:22:29 回复(0)

递归方法,三行代码

private static int eatChocolate(int N) {
        if (N == 1) return 1;
        if (N == 2) return 2;
        return eatChocolate(N - 1) + eatChocolate(N - 2);
    }
编辑于 2019-04-20 10:50:04 回复(0)