【配列1】平面で計算《新・Bランクup》

新・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;
   }
});
hogeちゃんの画像

縦・横 はカウント変数 Ij の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);
});
hogeちゃんの画像

実装例 C++の場合を参照。

コメント