首页 > 试题广场 >

客似云来

[编程题]客似云来
  • 热度指数:10255 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。
于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……
现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。

输入描述:
测试数据包括多组。
每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的第from天和第to天。


输出描述:
对应每一组输入,输出从from到to这些天里(包含from和to两天),需要做多少份早餐。
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);


        long[][] breakfastDp = new
        long[81][3]; // beakfastDp[i][0] 代表第 i 天 第一次来吃早餐
        // beakfastDp[i][1] 代表第 i 天 第二次来吃早餐
        // beakfastDp[i][2] 代表第 i 天 一直来吃早餐还带朋友
        breakfastDp[1][0] = 1;
        for (int i = 2; i <= 80; i++) {
            breakfastDp[i][0] = breakfastDp[i - 1][1] + breakfastDp[i - 1][2];
            breakfastDp[i][1] = breakfastDp[i - 1][0];
            breakfastDp[i][2] = breakfastDp[i - 1][1] + breakfastDp[i - 1][2];
        }

        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            int b = in.nextInt();
            long count = 0;
            for (int i = a; i <= b; i++) {
                count += breakfastDp[i][0];
                count += breakfastDp[i][1];
                count += breakfastDp[i][2];
            }
            System.out.println(count);
        }
    }
}
发表于 2023-08-15 21:07:13 回复(0)
import java.util.Scanner;

/*
 * 客似云来
 */
public class Main {
    public static void main(String[] args) {
        long []fib = new long[81];
        fib[1] = 1;
        fib[2] = 1;
        for (int i = 3; i < 81; i++) {
            fib[i] = fib[i - 1] + fib[i - 2];
        }
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
            int from = sc.nextInt();
            int  to = sc.nextInt();
            long ans = 0;
            for (int i = from; i <= to; i++) {
                ans += fib[i];
            }
            System.out.println(ans);
        }
    }
}

发表于 2023-04-12 20:28:45 回复(0)
注意要用long类型存储
import java.util.Scanner;

/**
 * @author haomin
 * @date 2022/06/01 18:13
 **/
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int start = in.nextInt();
            int end = in.nextInt();

            long[] dp = new long[end + 2];
            long result = 0;
            dp[1] = 1;
            dp[2] = 1;
            for(int i = 3;i < end+1;i++){
                dp[i] = dp[i-1] + dp[i-2];
            }

            for (int i = start; i <= end ; i++) {
                result += dp[i];
            }
            System.out.println(result);
        }
        in.close();
    }
}


发表于 2022-06-01 18:25:11 回复(0)
// write your code here
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
        int a=sc.nextInt();
        int b=sc.nextInt();
        long[] arr=new long[b];
        arr[0]=1;
        arr[1]=1;
        for(int i=2;i<b;i++){
            arr[i]=arr[i-1]+arr[i-2];
        }
        long sum=0;
        for(int j=a-1;j<b;j++){
            sum+=arr[j];
        }
        System.out.println(sum);
        }
    }
}
求问各位大佬这是为啥啊,说返回非零

发表于 2022-03-30 17:00:03 回复(0)
由于题目已经限制了输入数据的范围,所以可以先把所有的数据算出来,最后相加即可。
import java.util.Scanner;

public class Main{
    private static long[] insert(){
        //1 <= sc <= 80
        long[]dp = new long[81];
        dp[1]=1;
        dp[2]=1;
        for(int i=3;i<81;++i){
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp;
    }

    public static void main(String[]args){
        Scanner sc = new Scanner(System.in);
        long[]dp = insert();
        while(sc.hasNext()){
            int from = sc.nextInt();
            int to = sc.nextInt();
            long sum=0;
            for(int i=from;i<=to;++i){
                sum+=dp[i];
            }
            System.out.println(sum);
        }

    }
}


发表于 2022-03-29 20:33:51 回复(0)
import java.util.*;
import java.math.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        BigInteger[] fib = new BigInteger[80];
        fib[0] = new BigInteger("1");
        fib[1] = new BigInteger("1");
        for(int i = 2; i < 80; i++){
            fib[i] = fib[i-1].add(fib[i-2]);
        }
        while(sc.hasNext()){
            int from = sc.nextInt();
            int to = sc.nextInt();
            BigInteger count = new BigInteger("0");
            for(int i = from-1; i < to; i++){
                count = count.add(fib[i]);
            }
            System.out.println(count);
        }
    }
}

发表于 2021-07-21 19:17:06 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        long[] arr = new long[82];
        arr[0] = 1;
        arr[1] = 1;
        for (int i = 2; i < arr.length; i++){
            arr[i] = arr[i-1] + arr[i-2];
        }
        while (scan.hasNext()){
            int from = scan.nextInt();
            int to = scan.nextInt();
            long sum = 0;
            for (int i = from-1; i < to; i++){
                sum += arr[i];
            }
            System.out.println(sum);
        }
    }
}

发表于 2021-07-20 21:40:53 回复(0)
这道题有几个坑,第一个是要用大数表示,32位的数表示不了,第二个是from和to可以是一样的
如果两者一样,输出就是相应斐波那契数列的值
class Fibonacci {
	Fibonacci(int from, int to) {
		len = to;
		num = new long[len];
		num[0] = 1;
		if (len > 1)
			num[1] = 1;
		sum = 0;
		setFib(from);
	}
	private void setFib(int from) {
		for(int i = 2; i < len; i++) {
			num[i] = num[i - 1] + num[i - 2];
		}
		sum = num[from - 1];
		for(int i = from; i < len; i++)
			sum += num[i];
	}
	public long getFib(){
		return sum;
	}
	private int len;
	private long[] num;
	private long sum;
}


public class Main {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		while (cin.hasNext()) {
			Fibonacci fib = new Fibonacci(cin.nextInt(), cin.nextInt());
			System.out.println(fib.getFib());
		}
		cin.close();
	}
}

发表于 2017-04-06 21:47:01 回复(0)