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 != ?)
时间: 2024-10-24 20:22:29