蓝桥杯Java练习题(条件语句与循环语句)

题目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)。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值