fibonacci数列
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少
解题思路
2种解法 : 一种使用递归,一种是直接递推,
递归的时间复杂度:O(2^n)
递推的时间复杂度: O(n)
我们采用递推
代码
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int F[] = new int[n + 2];
F[1] = 1;F[2] = 1;
if (n > 2) {
for (int i = 3; i <= n; i++) {
F[i] = (F[i - 1] + F[i - 2]) % 10007;//用来保存余数
}
}
System.out.println(F[n]);
}
}
累加
问题描述
输出一行,包括一个整数,表示1+2+3+…+n的值。
数据规模与约定
1 <= n <= 1,000,000,000。
关键点
关键点是数据规模的约定,n的最大值过大.所以我们不能用 int 类型来定义n
(int可以放得下1000000000),但是int * int 默认的情况也是int(会溢出),所以我们用long 来定义n 这道题就很简单了。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
long n=in.nextInt();
long sum=(1+n)*n/2;
System.out.println(sum);
}
}
求圆的面积
问题描述
给定圆的半径r,求圆的面积。
数据规模与约定
1 <= r <= 10000。
输出格式
输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。
关键点
关键点是要保留小数点后7位。所以我们不妨用double来定义面积,以及输出的格式化问题
代码
import java.util.Scanner;
import static java.lang.Math.atan;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int r=in.nextInt();
double square=atan(1.0)*4 * r *r;
System.out.printf("%.7f",square);
}
}