蓝桥练习,填坑ing
开始填坑的第一天
假期又开始了,准备蓝桥,加油!!!刷题
1.Fibonacci数列
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定
1 <= n <= 1,000,000。
我的解决思路:
(1)直接根据斐波拉切数列的递推公式F(n)=F(n-1)+F(n-2),递归实现求得f(n),根据题目要求只需求每次结果对10007的余数即可,最终代码提交报超时,放弃递归。
(2)自底向上迭代求f(n)
import java.util.Scanner;
/**
* @author 知@了
* @create 2021-01-25-12:56
*/
public class Fibonacci数列 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.close();
// System.out.println(fibn(n));
// 非递归
int[] fi = new int[2];
fi[0] = fi[1] = 1;
for (int i = 2; i < n; i++) {
int t = (fi[0] + fi[1]) % 10007;
// if (t > 10007) t %= 10007;
fi[0] = fi[1];
fi[1] = t;
}
System.out.println(fi[1]);
}
// 递归
private static int fibn(int n) {
if (n <= 2) {
return 1;
}
return (fibn(n-1) + fibn(n - 2)) % 10007;
}
}
2.圆的面积
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
给定圆的半径r,求圆的面积。
输入格式
输入包含一个整数r,表示圆的半径。
输出格式
输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。
说明:在本题中,输入是一个整数,但是输出是一个实数。实数输出的问题如果没有特别说明,舍入都是按四舍五入进行。
样例输入
4
样例输出
50.2654825
数据规模与约定
1 <= r <= 10000。
我的解决思路:
直接用圆面积公式求解,主要需解决问题π值的确定调用Math.atan(1.0)*4和小数点位数限制,小数位数解决方法一通过%.f格式化输出结果,解决方法二通过BigDecimal.setScale()方法控制位数
import java.math.BigDecimal;
import java.util.Scanner;
/**
* @author 知@了
* @create 2021-01-25-13:36
*/
public class 圆的面积 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int r = in.nextInt();
in.close();
BigDecimal S = new BigDecimal(r * r * Math.atan(1.0) * 4);
System.out.println(S.setScale(7, BigDecimal.ROUND_HALF_UP));
}
}
3.序列求和
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
求1+2+3+…+n的值。
输入格式
输入包括一个整数n。
输出格式
输出一行,包括一个整数,表示1+2+3+…+n的值。
样例输入
4
样例输出
10
样例输入
100
样例输出
5050
数据规模与约定
1 <= n <= 1,000,000,000。
我的解决思路:
由于可能有大数存在,通过等差数列求和公式及使用BigDecimal存储数据并运算
import java.math.BigInteger;
import java.util.Scanner;
/**
* @author 知@了
* @create 2021-01-25-13:46
*/
public class 序列求和 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
BigInteger bn = new BigInteger(in.next());
in.close();
System.out.println(bn.add(new BigInteger("1")).multiply(bn).divide(new BigInteger("2")));
}
}