蓝桥杯Java B组

准备工作

练习入口 | 准备资料 | 查阅说明

编辑环境

我们建议您使用大赛指定的编辑环境来编写你的代码,以保证评测时和我们的编译环境一致,同时和比赛时使用的环境也一致。

推荐的编辑环境如下:

语言

编辑环境

下载地址

C++

Dev-CPP

SourceForge上的Dev-CPP

C

Dev-CPP

SourceForge上的Dev-CPP

JAVA

Eclipse

Eclipse

PYTHON

IDLE

Python

对于不同的语言,系统的编译环境如下:

语言

编译环境/解释器

编译选项

C++

g++ (GCC) 4.9.2

g++ code.cpp -O2 -Wl,--stack=268435456 -DONLINE_JUDGE

C

gcc (GCC) 4.9.2

gcc code.c -O2 -Wl,--stack=268435456 -DONLINE_JUDGE

JAVA

Javac 1.8.0

javac Main.java

PYTHON

Python 3.8.0

如果你使用Java语言,对于所有的试题,你的主类名称都必须是Main

C/C++语言中,主函数main的返回值类型必须是int,返回值必须是0,否则评测会认为程序运行错误。

学生机环境-Java编程环境及API帮助文档

链接: https://pan.baidu.com/s/1rbG9VOdycgSq58LXAqPVrw

提取码: cjg2

本人参加的是 Java软件开发 大学B组。所以使用上面链接提供的工具。



入门训练

试题编号

试题名称

关键字

更新时间

BEGIN-1

A+B问题

入门

2013-10-09

BEGIN-2

序列求和

入门 求和公式

2013-10-09

BEGIN-3

圆的面积

入门 实数输出

2013-10-09

BEGIN-4

Fibonacci数列

入门 数列 取模

2013-10-09

入门训练题主要是是为了给大家熟悉考试系统的环境。网页上给出 问题描述 和 一系列提示,

先在自己电脑上的开发环境敲出正确代码,再把代码拷贝到网页中的代码区。



A+B问题

问题描述

输入A、B,输出A+B。

数据规模与约定

-10000 <= A, B <= 10000。

提醒:做题时注意数据范围,自己选用的合适数据类型。比如此处用int没问题。

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);
    }
}



序列求和

问题描述

求1+2+3+...+n的值。

数据规模与约定

1 <= n <= 1,000,000,000。

输入格式

输出格式

输入包括一个整数n。

输出一行,包括一个整数,表示1+2+3+...+n的值。

注意到此处的数据规模高达10亿,参考下表int类型可以接受20多亿。输入n的值可以用int类型的变量接收。

但是考虑到这题等差数列求和公式:(1+n)*n/2 ,进行了亿级的乘法运算。所以结果还用int类型就会溢出数据了。

为了方便运算就用long类型的变量接收输入的数据。

Java八大基本数据类型

数据类型

字节

数据范围

byte

1

-128~127

short

2

-32768 ~ 32767

int

4

-2147483648 ~ 2147483647 (20亿级)

long

8

-18446744073709551616 ~ 18446744073709551615

float

4

-2147483648 ~ 2147483647

double

8

-18446744073709551616 ~ 18446744073709551615

char

2

英文字符所占字节 2,中文字符根据编码不同

boolean

1

true | false

Java源代码

import java.util.Scanner;

public class Main {
	
	public static void main(String args[]){	
		Scanner sc = new Scanner(System.in);
		Long n =sc.nextLong();
		System.out.println((1+n)*n/2);	
	}
}



圆的面积

问题描述

给定圆的半径r,求圆的面积。

数据规模与约定

1 <= r <= 10000 。

输入格式

输出格式

输入包含一个整数r,表示圆的半径。

输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。

思路:圆的面积公式 = πr^2
使用int变量接收输入数据,java中的π可以用Math.PI获取。通过公式求得结果,最后输出结果时保留7位小数。

Java源代码

import java.util.Scanner;

public class Main {

	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int r = sc.nextInt();
		double area = r * r * Math.PI;
		System.out.printf("%.7f",area);
	}
}

printf不就是C语言的语法吗

总结

System.out.print(""); 输出语句后不换行,再进行输出接着刚才的语句后面

System.out.println(""); 输出语句后换行,再进行输出在新的一行输出

System.out.printf("");输出格式控制的语句,不会自动换行。



Fibonacci数列

问题描述

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

数据规模与约定

1 <= n <= 1,000,000。

输入格式

输出格式

输入包含一个整数n。

输出一行,包含一个整数,表示Fn除以10007的余数。

思路: 答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,

再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。

Java源代码

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.print(fibonacci(n));
	}
	
	public static int fibonacci(int n){
		int f1=1,f2=1,temp = 0;
		for(int i=2;i<n;i++){
			temp = f2;
			f2 = (f1+f2)%10007;
			f1 = temp;
		}
		return f2;
	}
}

由于最近刚学了JUnit单元测试,为了巩固知识,活学活用,所以把源代码模块化方便测试。

官方测试用例

序号

输入

输出

1

1

1

2

2

1

3

10

55

4

55

2091

5

100

6545

6

500

8907

7

999

4659

8

9999

9973

9

99999

6415

10

999999

3131

很简单,但是不要大意是锦州。