刷题规划
蓝桥杯 Java 组
第 1~7 天刷题清单(入门基础版,直接照刷)
每天 **6 题**,一周 42 题,稳扎稳打。
第 1 天:输入输出 + 简单循环
-
输出 Hello World
-
输入两个整数,求和
-
输入一个整数,判断奇偶
-
输出 1~100 的和
-
输入 n,输出 1~n 的所有数
-
输入 n,求 1~n 的和
第 2 天:一维数组基础
-
输入 n 个数,求最大值
-
输入 n 个数,求最小值
-
求数组所有元素的和
-
数组元素逆序存放并输出
-
查找某个数在数组中第一次出现的位置
-
统计数组中正数、负数、0 的个数
第 3 天:二维数组入门
-
输出一个 3×3 矩阵
-
求二维数组所有元素和
-
求矩阵每行的最大值
-
求矩阵每列的和
-
矩阵转置(行变列)
-
输出主对角线元素
第 4 天:字符串基础
-
统计字符串长度
-
判断两个字符串是否相等
-
字符串反转
-
统计字符串中字母、数字、空格个数
-
查找子串第一次出现的位置
-
把字符串全部转大写/小写
第 5 天:字符串 + 简单模拟
-
去掉字符串所有空格
-
提取字符串中的数字并求和
-
判断字符串是否是回文
-
统计某字符出现次数
-
字符串替换(把 a 换成 b)
-
按空格分割字符串并输出
第 6 天:简单数学题
-
判断一个数是否是质数
-
求两个数的最大公约数
-
求两个数的最小公倍数
-
十进制转二进制
-
二进制转十进制
-
求 1~n 中所有质数
第 7 天:综合小模拟(蓝桥杯必考风格)
-
输入年月日,计算是这一年的第几天
-
统计一个整数中 0~9 每个数字出现几次
-
输入一个数,判断是否是回文数
-
求斐波那契数列第 n 项
-
打印九九乘法表
-
输入一个字符串,按字典序排序输出
用一个代码讲清楚关于数组的代码题
java
import java.util.Scanner;
public class ArrayOperations {
public static void main(String[] args) {
// 定义一个示例数组(也可以改为用户输入)
int[] arr = {12, -5, 0, 8, -3, 0, 15, -9, 7};
System.out.println("原始数组:");
printArray(arr); // 打印原始数组,方便对比
// 1. 求数组所有元素的和
int sum = calculateArraySum(arr);
System.out.println("\n1. 数组所有元素的和:" + sum);
// 2. 数组元素逆序存放并输出
int[] reversedArr = reverseArray(arr);
System.out.println("2. 数组逆序后:");
printArray(reversedArr);
// 3. 查找某个数在数组中第一次出现的位置
Scanner sc = new Scanner(System.in);
System.out.print("\n3. 请输入要查找的数字:");
int target = sc.nextInt();
int index = findFirstOccurrence(arr, target);
if (index != -1) {
System.out.println("数字 " + target + " 第一次出现的位置(索引):" + index);
} else {
System.out.println("数字 " + target + " 不在数组中");
}
// 4. 统计数组中正数、负数、0 的个数
countPositiveNegativeZero(arr);
sc.close(); // 关闭Scanner
}
/**
* 功能1:计算数组所有元素的和
* @param arr 待计算的数组
* @return 数组元素的总和
*/
public static int calculateArraySum(int[] arr) {
int sum = 0;
for (int num : arr) { // 增强for循环遍历数组
sum += num; // 累加每个元素
}
return sum;
}
/**
* 功能2:将数组元素逆序存放并返回新数组(不修改原数组)
* @param arr 原始数组
* @return 逆序后的新数组
*/
public static int[] reverseArray(int[] arr) {
int[] reversed = new int[arr.length]; // 创建和原数组长度相同的新数组
for (int i = 0; i < arr.length; i++) {
// 原数组第i个元素 → 逆序数组的第(arr.length-1-i)个位置
reversed[i] = arr[arr.length - 1 - i];
}
return reversed;
}
/**
* 功能3:查找某个数在数组中第一次出现的位置(索引)
* @param arr 待查找的数组
* @param target 要查找的数字
* @return 第一次出现的索引(不存在返回-1)
*/
public static int findFirstOccurrence(int[] arr, int target) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) { // 找到第一个匹配的元素
return i; // 立即返回索引
}
}
return -1; // 未找到返回-1
}
/**
* 功能4:统计数组中正数、负数、0 的个数并输出
* @param arr 待统计的数组
*/
public static void countPositiveNegativeZero(int[] arr) {
int positive = 0; // 正数个数
int negative = 0; // 负数个数
int zero = 0; // 0的个数
for (int num : arr) {
//num 是增强 for 循环(也叫 for-each 循环) 中定义的临时变量
//专门用来接收数组遍历过程中 "当前循环到的元素值",我用最通俗的方式给你讲清楚:
if (num > 0) {
positive++;
} else if (num < 0) {
negative++;
} else {
zero++;
}
}
// 输出统计结果
System.out.println("\n4. 数组统计结果:");
System.out.println("正数个数:" + positive);
System.out.println("负数个数:" + negative);
System.out.println("0的个数:" + zero);
}
/**
* 辅助方法:打印数组(方便查看结果)
* @param arr 待打印的数组
*/
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if (i != arr.length - 1) {
System.out.print(", "); // 元素间加逗号分隔
}
}
System.out.println();
}
}
代码关键解释
- 计算数组元素和(功能 3)
使用 增强 for 循环(for (int num : arr))遍历数组,语法简洁,无需关注索引;
初始化总和变量 sum = 0,逐个累加数组元素,最终返回总和。
- 数组逆序存放(功能 4)
创建一个和原数组长度相同的新数组 reversed,避免修改原数组;
核心逻辑:reversed[i] = arr[arr.length - 1 - i],将原数组末尾元素放到新数组开头。
- 查找数字第一次出现的位置(功能 5)
用普通 for 循环遍历数组(需要索引),找到第一个匹配的元素立即返回索引;
若遍历结束未找到,返回 -1(这是编程中表示 "未找到" 的通用约定)。
- 统计正数 / 负数 / 0 的个数(功能 6)
定义 3 个计数器变量,遍历数组时通过 if-else if-else 判断元素类型,对应计数器自增;
最后打印统计结果,逻辑直观易懂。