1. Fibonacci数列
思路: 可以按常规计算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系统。
S_123789 发布了41 篇原创文章 · 获赞 20 · 访问量 2935 私信 关注