NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。
于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……
现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。
测试数据包括多组。
每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的第from天和第to天。
对应每一组输入,输出从from到to这些天里(包含from和to两天),需要做多少份早餐。
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); } } }
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(); } }
// 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); } } }求问各位大佬这是为啥啊,说返回非零
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); } } }
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); } } }
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); } } }
这道题有几个坑,第一个是要用大数表示,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(); } }