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;
}