我好菜啊
0 前言
蓝桥杯入门训练题,别问,再问我就哭了。
1 入门训练 A+B问题
问题描述:
输入 A、B,输出 A+B。
输入格式:
输入的第一行包括两个整数,由空格分隔,分别表示 A、B。
输出格式:
输出一行,包括一个整数,表示 A+B 的值。
样例输入:
12 45
样例输出:
57
数据规模与约定:
-10000 <= A, B <= 10000。
解题思路:
获取两个数的值,加起来,然后输出。
参考代码(Java):
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);
}
}
2 入门训练 序列求和
问题描述:
求 1+2+3+…+n 的值。
输入格式:
输入包括一个整数n。
输出格式:
输出一行,包括一个整数,表示 1+2+3+…+n 的值。
样例输入:
4
样例输出:
10
样例输入:
100
样例输出:
5050
数据规模与约定:
1 <= n <= 1,000,000,000。
解题思路:
直接使用 (1+n)*n/2,这个公式就可以了。但是要注意的是,int 型最大值是 2^31 - 1,输入这里是可以的,但是输出就不行了,很可能会超过这个值。
所以直接用 Long,2^63 -1,肯定足够的。
参考代码(Java):
import java.util.Scanner;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
Long n = sc.nextLong(); // int 不够用,所以用 long
System.out.println((1+n)*n/2);
}
}
3 入门训练 圆的面积
问题描述:
给定圆的半径 r,求圆的面积。
输入格式:
输入包含一个整数 r,表示圆的半径。
输出格式:
输出一行,包含一个实数,四舍五入保留小数点后 7 位,表示圆的面积。
样例输入:
4
样例输出:
50.2654825
数据规模与约定:
1 <= r <= 10000。
提示:
本题对精度要求较高,请注意π的值应该取较精确的值。你可以使用常量来表示 π,比如 PI=3.14159265358979323,也可以使用数学公式来求 π,比如 PI=atan(1.0)*4。
解题思路:
获得值,计算,然后格式化输出。
这里 import java.text.DecimalFormat; 因为需要格式化输出,”#.0000000” 表示保留小数点后 7 位,有就显示,没有就补零.
“00000” 是输出 5 位,不足就补零。
参考代码(Java):
import java.util.Scanner;
import java.text.DecimalFormat;
public class Main
{
public static void main(String args[])
{
double pi=3.14159265358979323; //直接使用常量
Scanner sc = new Scanner(System.in);
Integer r = sc.nextInt();
double s = pi*r*r;
DecimalFormat df=new DecimalFormat("#.0000000"); //格式化,保留小数点后 7 位
System.out.println(df.format(s)); //输出
}
}
4 入门训练 Fibonacci数列
问题描述:
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。
解题思路:
Fn=Fn-1+Fn-2,其中 F1=F2=1,直接套这个公式,直接计算除以 10007 的余数。
这里要注意的是,1 也可以是输入。
参考代码 1 (Java):
import java.util.Scanner;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //获得 n
int[]f = new int[n]; //用数组记录第 n 项的余数
if (n == 1 || n == 2) {
f[n - 1] = 1;
}
else {
for (int i = 2;i < n;i++) {
f[0] = 1;
f[1] = 1;
f[i] =(f[i - 1] + f[i - 2]) % 10007;
}
}
System.out.println(f[n - 1]);
}
}
参考代码 2 (Java):
import java.util.Scanner;
public class Main
{
public static void main(String args[])
{
int[] f= new int[1000001];
f[1] = f[2] = 1;
for (int i = 3; i <= 1000000; i++) {
f[i] = (f[i-1] + f[i-2]) % 10007;
}
System.out.println(f[sc.nextInt()]);
}
}
参考代码 3 (Java):
import java.util.Scanner;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] f= new int[n+1];
if(n==1) {
f[1]=1;
}
else {
f[1] = f[2] = 1;
for (int i = 3; i <= n; i++) {
f[i] = (f[i-1] + f[i-2]) % 10007;
}
}
System.out.println(f[n]);
}
}