新・Bランクレベルアップメニュー 【配列 1】平面で計算
【配列 1】平面で計算 コード 1/2
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
for (let i = 1; i <= N; i++) {
A.push(lines[i].split(' ').map(Number));
}
console.log(MaxSum(A));
function MaxSum(arr) {
let ans = 0;
let p = 0; // 斜め列(左上から)
let m = 0; // 斜め列(右上から)
for (let i = 0; i < N; i++) {
p += arr[i][i];
m += arr[i][N - 1 - i];
let x = 0; // 横列
let y = 0; // 縦列
for (let j = 0; j < N; j++) {
x += arr[i][j];
y += arr[j][i];
}
ans = Math.max(ans, p, m, x, y);
}
return ans;
}
});
縦・横 はカウント変数 I・ j の2重ループで += arr[i][i]
と += arr[i][N - 1 - i]
で計算。斜めはカウント変数 i のループで +=arr[i][i]
と +=arr[i][N - 1 - i]
で計算しています。
【配列 1】平面で計算 コード 2/2 (C++実装例参照)
reader.on('close', () => {
const N = Number(lines[0]);
const A = [];
let ans = 0;
for (let i = 1; i <= N; i++) {
A.push(lines[i].split(' ').map(Number));
}
for (let i = 0; i < N; i++) {
let row_sum = 0;
let col_sum = 0;
for (let j = 0; j < N; j++) {
row_sum += A[i][j];
col_sum += A[j][i];
}
ans = Math.max(row_sum, col_sum, ans);
}
let left_right_down = 0;
let lleft_right_up = 0;
for (let i = 0; i < N; i++) {
left_right_down += A[i][i];
lleft_right_up += A[N - 1 - i][i];
}
ans = Math.max(left_right_down, lleft_right_up, ans);
console.log(ans);
});
実装例 C++の場合を参照。
コメント