第1关:求转置矩阵
任务描述
本关任务: 输入9个整数,按3行3列的格式存入二维数组ma,按矩阵的格式输出数组ma;计算矩阵ma的转置矩阵mb;按矩阵的格式输出数组mb。
相关知识
为了完成本关任务,你需要掌握:1. 数组的创建,2.如何遍历数组,3.如何求转置矩阵。
本题思路为: (以2*3的矩阵为例)
设矩阵a和b分别用二维数组a[2][3] 和b[3][2]表示,则任务实现的步骤如下。
(1)输入2行3列的6个数据,分别存入数组a中,可用双重循环实现;
(2)计算转置矩阵:分析数组a中的每个元素a[i][j]应该赋给数组b中的哪个元素?
a[0][0] --> b[0][0]
a[0][1] --> b[1][0]
a[0][2] --> b[2][0]
a[1][0] --> b[0][1]
a[1][1] --> b[1][1]
a[1][2] --> b[2][1]
分析规律:对于每个数组元素a[i][j],应该放到数组b中的元素b[j][i]的位置。 然后用双重循环遍历数组a,将每个元素赋给b中的对应元素即可。
(3)输出数组b的元素,按行输出,即为矩阵的样式。可用双重循环实现遍历数组b,将每个元素输出。注意输出一行后要换行。
测试说明
平台会对你编写的代码进行测试:
测试输入:1 2 3 4 5 6 7 8 9 ;
预期输出:
原始矩阵
1 2 3
4 5 6
7 8 9
转置后的矩阵
1 4 7
2 5 8
3 6 9
import java.util.Scanner;
public class ExchangeMatrix {
public static void main(String[] args) {
int[][] ma = new int[3][3];
int[][] mb = new int[3][3];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
ma[i][j] = sc.nextInt();
}
}
// 输出矩阵ma
System.out.println("原始矩阵");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.printf("%5d" , ma[i][j]);
}
System.out.println();
}
// 计算转置矩阵mb
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
mb[j][i] = ma[i][j];
}
}
// 输出矩阵mb
System.out.println("转置后的矩阵");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.printf("%5d", mb[i][j]);
}
System.out.println();
}
}
}
第2关:字符串压缩
任务描述
本关任务:字符串压缩。若输入字符串: “aabbbccdaa” ,计算每个连续的字符的个数,并生成一个新的字符串:“a2b3c2d1a2”。
相关知识
为了完成本关任务,你需要掌握:1. 字符串的输入,2. 遍历字符串,3.字符串的连接。
字符串输: nextLine()
字符串的遍历: 取出每个字符 charAt(k)
字符串的连接: +
/*输入字符串:“aabbbccdaa” ,生成字符串:“a2b3c2d1a2”*/
import java.util.Scanner;
public class StringPress {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一行字符");
String str = sc.nextLine();
StringBuilder compressedStr = new StringBuilder();
int count = 1;
char prevChar = str.charAt(0);
for (int i = 1; i < str.length(); i++) {
char currentChar = str.charAt(i);
if (currentChar == prevChar) {
count++;
} else {
compressedStr.append(prevChar);
compressedStr.append(count);
prevChar = currentChar;
count = 1;
}
}
compressedStr.append(prevChar);
compressedStr.append(count);
System.out.println("压缩后的字符串"+compressedStr);
}
}