题目1:闰年判断
题目描述:
输入一个年份,判断是否为闰年。闰年规则:
1. 能被4整除但不能被100整除;
2. 或能被400整除。
输入示例:
2000
输出示例:
true
参考代码:
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
boolean isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
System.out.println(isLeap);
}
}
**解析**:
- **核心逻辑**:严格遵循闰年规则的两个条件。
- **易错点**:
- 未处理世纪年(如2000年是闰年,1900年不是)。
- 条件顺序错误(若先判断`year % 100 == 0`,会导致逻辑错误)。
题目2:计算阶乘
题目描述:
输入一个整数n(0 ≤ n ≤ 12),输出n的阶乘(n!)。
输入示例:
5
输出示例:
120
参考代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
System.out.println(result);
}
}
解析:
- **边界处理**:
- 当n=0时,0! = 1,循环不会执行,结果正确。
- **数据溢出**:
- 题目限制n≤12,因为13! = 6227020800超过`int`范围(2147483647)。
题目3:输出斐波那契数列前n项
题目描述:
输入一个整数n(n ≥ 1),输出斐波那契数列的前n项(每项用空格分隔)。
斐波那契数列定义:
- F(0) = 0, F(1) = 1
- F(n) = F(n-1) + F(n-2)(n ≥ 2)
输入示例:
5
输出示例:
0 1 1 2 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 a = 0, b = 1;
for (int i = 0; i < n; i++) {
System.out.print(a + " ");
int temp = a + b;
a = b;
b = temp;
}
}
}
**解析**:
- **优化技巧**:用变量滚动更新代替数组存储,节省内存。
- **易错点**:
- 初始条件错误(如从F(1)=1开始)。
- 输出格式错误(末尾多一个空格,但蓝桥杯通常允许)。
题目4:判断素数
题目描述:
输入一个整数n(n ≥ 0),判断是否为素数(质数)。
输入示例:
17
输出示例:
true
**参考代码**:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
boolean isPrime = true;
if (n <= 1) {
isPrime = false;
} else {
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
isPrime = false;
break;
}
}
}
System.out.println(isPrime);
}
}
**解析**:
- **优化点**:只需遍历到√n即可,时间复杂度降为O(√n)。
- **边界处理**:n=0或1时直接返回false。
题目5:数字反转
**题目描述**:
输入一个整数n(-10000 ≤ n ≤ 10000),输出反转后的数字(保留符号,去除前导零)。
**输入示例**:
```
-1230
```
**输出示例**:
```
-321
``` **参考代码**:
```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 reversed = 0;
int sign = n < 0 ? -1 : 1;
n = Math.abs(n);
while (n > 0) {
reversed = reversed * 10 + n % 10;
n /= 10;
}
reversed *= sign;
System.out.println(reversed);
}
}
```
**解析**:
- **关键步骤**:
1. 处理符号位。
2. 反转绝对值部分。
3. 去除前导零(自动处理,如输入1200,反转后为21)。
- **易错点**:
- 未处理负数(如输入-123,输出应为-321)。