蓝桥杯官网题解——入门训练 {Fibonacci数列、圆的面积、序列求和}

1. Fibonacci数列
**问题描述**:Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
思路: 可以按常规计算f(n),然后再去%10007得到余数,这显然不是出题人的意愿,可能超时。用一个数组存它的余数,这就像是把迭代优化为数组去解题。

import java.util.Scanner;
public class lanqiao1 {
  static long []a = new long[10000000];
  public static long fib(int n){
	  a[1]=1;
	  a[2]=1;
      for(int i=3;i<=n;i++){
    	  a[i] = (a[i-1]+a[i-2])%10007;
      } 
      return a[n];
  }
  public static void main(String []args){
	  Scanner obj = new Scanner(System.in); 
	  int n = obj.nextInt();
	  System.out.println(fib(n));
  }
}

2. 圆的面积
在这里插入图片描述
思路:要注意的就是Π的确定,用atan(1)*4确定 以及 保留小数点后7位。

import java.util.Scanner;
import java.lang.Math;

public class lanqiao1 {
  public static void main(String []args){
	 double PI=Math.atan(1.0)*4;  //求Π
	 Scanner obj = new Scanner(System.in);
	 int r = obj.nextInt();
	 double a = PI*r*r;
	 System.out.printf("%.7f",a);
  }
}

3. 序列求和
在这里插入图片描述在这里插入图片描述
思路:1.数据规模这么大,可能不在整型int范围内,换成长整型long;
2.“暴力”的累加方法往往会导致超时,换成1+2+3…+n = (1+n)*n/2

import java.util.Scanner;
public class lanqiao1 {
	public static long get(long n){
		long sum = (1+n)*n/2;
		return sum;
	}
  public static void main(String []args){
	  Scanner obj = new Scanner(System.in);
	  long n = obj.nextLong();
	  System.out.print(get(n));
	  }
 }

小结:熟悉一下oj系统。

发布了41 篇原创文章 · 获赞 20 · 访问量 2934

猜你喜欢

转载自blog.csdn.net/S_123789/article/details/104029302