50011
这题考察如何定义method。method主要由
- 返回值 (return value)
- 方法名 (method name)
- 参数列表 (argument list)
- 方法体 (method body)
组成。
这题的max方法,大概是:
int max(int a, int b, int c) {
// ...
}
60001 求平均值
注意经常出现的错误:整数除整数,结果仍为整数。
60002 求最大值及其下标
这题考察遍历数组的方法:
for (int i = 0; i < array.length; ++ i) {
// 通过 arrray[i] 可以访问数组 array 的第 i 个元素
}
60003 逆序输出
逆序访问数组即可:
for (int i = array.length - 1; i >= 0; -- i) {
// todo
}
60004 交换最小值和最大值
解题思路
1. 通过60002, 我们可以找到最大值及其下标。由此可以把该值 maximum 与数组元素 array[0] 交换。
2. 稍微修改程序,我们可以找到最小值及其下表。由此可以把该值 minimal 与数组末尾元素 array[array.length - 1] 交换。
3. 如何交换。大家可以参考下述这段可复用(在1, 2步骤中,都可以调用它)的代码
// 交换 array[idx1] 和 array[idx2]
static void swap(int[] array, int idx1, int idx2) {
int temp = array[idx1];
array[idx1] = array[idx2];
array[idx2] = temp;
}
// 在main函数中,假如有下述数组
int[] a = new int[] {0, 1, 2, 3};
// 通过下述的swap函数,数组 a 会变成 {3, 1, 2, 0}
swap(a, 0, a.length - 1);
大致刻画解题思路的代码如下:
public static void main(String[] args) {
// ...
for (int ri = 0; ri < repeat; ++ ri) {
int nums = new int[n];
// input n numbers
// ...
int maxIdx = minIdx = 0;
for (int i = 0; i < n; ++ i) {
// Find the real maxIdx and minIdx here
}
swap(nums, maxIdx, 0);
swap(nums, minIdx, nums.length - 1);
}
}
static void swap(int[] array, int idx1, int idx2) {
int temp = array[idx1];
array[idx1] = array[idx2];
array[idx2] = temp;
}
60011 矩阵运算
1. 通过下述代码可以访问矩阵中的第 i 行 第 j 列的元素:
for (int i = 0; i < n; ++ i)
for (int j = 0; j < n; ++ j)
// todo ...
// 注意:如果你要在 for 中执行多条语句,那么需要加上花括号
2. 读清题意,只有
同时满足下述三种情况的数字才能被加入 sum 中:
- 不在最后一行 (i != ?)
- 不在最后一列 (j != ?)
- 不在副对角线上 (i + j != ?)