NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。
于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……
现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。
测试数据包括多组。
每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的第from天和第to天。
对应每一组输入,输出从from到to这些天里(包含from和to两天),需要做多少份早餐。
求斐波那契数列的范围和 // write your code here cpp #include<iostream> #include<algorithm> using namespace std; int main() { int from,to; while(cin>>from>>to) { long sum = 0,a = 1,b = 1; for(int i = 0;i < to; ++i) { if(i>=from-1) sum+=a; swap(a,b); b += a; } cout<<sum<<endl; } return 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(); } }
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* 客似云来
* 题目描述
* NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,
* 就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。
* 于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……
* 现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。
* 输入描述:
* 测试数据包括多组。每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的第from天和第to天。
* 输出描述:
* 对应每一组输入,输出从from到to这些天里(包含from和to两天),需要做多少份早餐。
* 输入例子:
* 1 10
* 2 8
* 36 80
* 输出例子:
* 143
* 53
* 61305790697453774
*
* @author shijiacheng
* @date 2018/2/12.
*/
public class BP1004GuestArrive {
private static Map<Integer, Long> map = new HashMap<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int from = sc.nextInt();
int to = sc.nextInt();
long count = 0;
for (int i = from; i <= to; i++) {
count = count + getPersonCount(i);
}
System.out.println(count);
}
}
public static long getPersonCount(int day) {
if (day == 1) {
return 1;
}
if (day == 2) {
return 1;
}
//1、1、2、3、5……
long prePreNum = 1;
long preNum = 1;
long result = 0;
if (map.containsKey(day)) {
return map.get(day);
} else {
for (int i = 3; i <= day; i++) {
result = prePreNum + preNum;
map.put(i, result);
prePreNum = preNum;
preNum = result;
}
return result;
}
}
}
import java.util.*; public class Main{ private static long[] fibs = new long[81]; public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int from = scanner.nextInt(); int to = scanner.nextInt(); long ans = 0; Fibonacci(); for (int i = from; i <= to; i++) { ans += fibs[i]; } System.out.println(ans); } } private static void Fibonacci() { fibs[0] = 0; fibs[1] = 1; fibs[2] = 1; for (int i = 3; i < fibs.length; i++) { fibs[i] = fibs[i - 1] + fibs[i - 2]; } } }
//Fibonacci数列 from 位置到 to 位置 元素和,注意不要溢出。
#include<iostream>
using namespace std;
int main(){
long long arr[80]={1,1};
for(int i=2;i<80;i++){
arr[i] = arr[i-1]+arr[i-2];
}
int from = 0, to = 0;
while(cin>>from>>to){
long long res = 0;
for(int i = from;i<=to;i++){
res = res + arr[i-1];
}
cout<<res<<endl;
}
return 0;
}
import java.util.*; import java.math.*; public class Main{ public static void main(String[] args){ BigInteger[] people=new BigInteger[85]; people[0]=new BigInteger("1"); people[1]=new BigInteger("1"); for(int i=2;i<85;i++){ people[i]=people[i-1].add(people[i-2]); } Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int from=sc.nextInt(); int to=sc.nextInt(); BigInteger result=new BigInteger("0"); for(int i=from-1;i<to;i++){ result=result.add(people[i]); } System.out.println(result); } } }
#include <iostream> #include <vector> using namespace std; int main(){ int from, to; long long count; while(cin >> from >> to){ count = 0; vector<long long> v(80, 0); v[0] = 1; v[1] = 1; for(int i = 2; i < 80; ++i){ v[i] = v[i - 2] + v[i - 1]; } for(int i = from - 1; i < to; ++i){ count += v[i]; } cout << count << endl; } return 0; }
斐波那契,动态规划思想,需要用vector保存前面的值,用于统计
#include<iostream> #include<vector> using namespace std; int main() { int from=0; int to=0; while(cin>>from>>to) { //循环里是dp[i+1],所以多开一个 vector<long long> dp(to+1,0); //dp[0]不管了,直接从dp[1]代表第一天 dp[1]=1; dp[2]=1; for(int i=2;i<to;i++) { dp[i+1]=dp[i]+dp[i-1]; } long long count=0; //from,to也要算,count统计 for(int i=from;i<=to;i++) { count+=dp[i]; } cout<<count<<endl; } return 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); } } }
#include<iostream> #include<vector> using namespace std; int main() { vector<long long> B(81,0); B[1] = 1; B[2] = 1; for(int i = 3; i <= 80; i++){ long long next = B[i-1] + B[i-2]; B[i] = next; } int n,m; while(cin >> n >> m) { long long sumB = 0; for(int i = n; i <= m; i++) { sumB += B[i]; } cout << sumB << endl; } return 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 from = sc.nextInt(); int to = sc.nextInt(); long ans = 0L; long[] data = new long[to + 1]; data[0] = 1; data[1] = 1; for (int i = 2; i < to; i++) { data[i] = data[i - 1] + data[i - 2]; } for (int i = from - 1; i < to; i++) { ans += data[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(); } }
import java.util.*; public class Main{ public static void main(String[] args){ long[] arr = new long[81]; arr[0] = 0; arr[1] = 1; arr[2] = 1; for(int i = 3;i < arr.length;i++){ arr[i] = arr[i -1] +arr[ i - 2]; } Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int from = sc.nextInt(); int to = sc.nextInt(); long sum = 0; for(int i = from;i <= to;i++){ sum += arr[i]; } System.out.println(sum); } } }
// 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); } } }
//通过题目数据知道考点是斐波那契数列的考察 #include <iostream> #include <vector> using namespace std; int main() { int from, to; while(cin >> from >> to) { vector<long long> v(81, 0);//long long保存数据 v[1] = v[2] = 1; for(int i = 3; i < 82; i++) v[i] = v[i - 1] + v[i - 2]; long long ans = 0; for(int i = from; i <= to; i++) ans += v[i]; cout << ans << endl; } return 0; }