题目一:Fibonacci数列
问题描述:
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
解决思路:
我们可以先写一小段Fibonacci数列来总结规律:1,1,2,3,5,8,13,21,34,55
![注意:在此处我们为了总结出规律,将除数缩小成5(也可以为数列中其他较小的值,此处仅是举例)]
通过计算我们可以得出相应的余数数列:1,1,2,3,0,3,3,1,4,0
通过上诉结果我们可以看出当Fn<5(即是除数)时,余数值就是Fn;而当Fn>=5时,存在一个规律即是:(8+13)%5=(8%5+13%5)%5。于是我们可以猜想不算出Fn的值,而是直接将余数值用数组存储起来。通过验证,这样做确实可行。
解决代码:
/**
注:由于方便问题中的n与fn对应,此代码中的余数数组从下标1开始使用
*/
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]);
}
}
/**
注:还可从下标0开始使用
*/
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+1];
f[0] = 1;
f[1] = 1;
if(n > 1) {
for (int i = 2; i <= n; i++) {
f[i] = (f[i - 1] + f[i - 2]) % 10007;
}
}
System.out.println(f[n-1]);
}
}
题目二:圆的面积
问题描述:
给定圆的半径r,求圆的面积(四舍五入保留小数点后7位)。
需要注意:
-
由于对结果的精度有要求,所以要注意PI的取值。
-
Java中保留特定小数位数的几种方式:
-
new DecimalFormat("#.0000000").format(Xxx);
-
Math.round(Xxx*10000000)/10000000);
-
String.format("%.7f", Xxx);
-
nf.setMaximumFractionDigits(7); nf.setRoundingMode(RoundingMode.UP); nf.format(Xxx); ```
-
解决代码:
/**
使用上面任意一种方法均可
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int r = sc.nextInt();
System.out.println(String.format("%.7f", Math.PI*r*r));
}
}
题目三:序列求和
问题描述:
求1+2+3+...+n的值。(时间限制:1.0s,内存限制:256.0MB;1 <= n <= 1,000,000,000。)
需要注意:
- 用来保存结果的数据类型是哪种。
解决代码:
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println((long)(1+n)*n/2);
}
}
题目三:A+B问题
问题描述:
输入A、B,输出A+B。(时间限制:1.0s,内存限制:256.0MB;-10000 <= A, B <= 10000。)
解决代码:
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
Integer a = sc.nextInt();
Integer b = sc.nextInt();
System.out.println(a + b);
}
}