横の合計と縦の合計
一行目に行数 r と列数 c が与えられ、続く r 行に一行 c 個ずつ整数が与えられる。
一行目に各行(横)の合計 r 個を上から、二行目に各列(縦)の合計 c 個を左から、空白一つで区切って出力せよ。
- 入力
- 1 ≤ r, c ≤ 50、-1000 ≤ 各整数 ≤ 1000
- 出力
- 二行:横の合計 r 個、縦の合計 c 個
2 3 1 2 3 4 5 6
6 15 5 7 9
一行目に行数 r と列数 c が与えられ、続く r 行に一行 c 個ずつ整数が与えられる。
一行目に各行(横)の合計 r 個を上から、二行目に各列(縦)の合計 c 個を左から、空白一つで区切って出力せよ。
2 3 1 2 3 4 5 6
6 15 5 7 9
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
横の合計は一行を足せばよいですが、縦の合計は外側のループが列(j)、内側が行(i)です。
r と c を取り違えると正方形のときだけ合うので、2×3 のような長方形で必ず試します。
二次元リストの作り方:Python は [[0] * c] * r が同じ行を r 回指す落とし穴があるので [[0] * c for _ in range(r)] と書きます。
C は int g[50][50]、C++ は vector<vector<int>>、C# は int[,](要素は g[i, j])と int[][] の二通り、Java は int[r][c]。
Craykon は grid.追加(コンソール.数読み()) で行を一つずつ入れ、grid[i][j] で読みます。
r, c = map(int, input().split())grid = [list(map(int, input().split())) for _ in range(r)]row_sums = [sum(row) for row in grid]col_sums = [sum(grid[i][j] for i in range(r)) for j in range(c)]print(*row_sums)print(*col_sums)const lines = require("fs").readFileSync(0, "utf8").trim().split("\n");const [r, c] = lines[0].trim().split(/\s+/).map(Number);const grid = lines.slice(1, r + 1).map((line) => line.trim().split(/\s+/).map(Number));const rowSums = grid.map((row) => row.reduce((s, x) => s + x, 0));const colSums = new Array(c).fill(0);for (let i = 0; i < r; i++) { for (let j = 0; j < c; j++) colSums[j] += grid[i][j];}console.log(rowSums.join(" "));console.log(colSums.join(" "));import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").trim().split("\n");const [r, c]: number[] = lines[0].trim().split(/\s+/).map(Number);const grid: number[][] = lines.slice(1, r + 1).map((line) => line.trim().split(/\s+/).map(Number));const rowSums: number[] = grid.map((row) => row.reduce((s, x) => s + x, 0));const colSums: number[] = new Array<number>(c).fill(0);for (let i = 0; i < r; i++) { for (let j = 0; j < c; j++) colSums[j] += grid[i][j];}console.log(rowSums.join(" "));console.log(colSums.join(" "));import java.util.Scanner;import java.util.StringJoiner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int r = sc.nextInt(), c = sc.nextInt(); int[] rowSums = new int[r]; int[] colSums = new int[c]; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { int x = sc.nextInt(); rowSums[i] += x; colSums[j] += x; } } StringJoiner rows = new StringJoiner(" "); for (int s : rowSums) rows.add(String.valueOf(s)); StringJoiner cols = new StringJoiner(" "); for (int s : colSums) cols.add(String.valueOf(s)); System.out.println(rows); System.out.println(cols); }}using System;using System.Linq; class Program{ static void Main() { int[] rc = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); int r = rc[0], c = rc[1]; int[,] grid = new int[r, c]; for (int i = 0; i < r; i++) { int[] row = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); for (int j = 0; j < c; j++) grid[i, j] = row[j]; } var rowSums = Enumerable.Range(0, r).Select(i => Enumerable.Range(0, c).Sum(j => grid[i, j])); var colSums = Enumerable.Range(0, c).Select(j => Enumerable.Range(0, r).Sum(i => grid[i, j])); Console.WriteLine(string.Join(" ", rowSums)); Console.WriteLine(string.Join(" ", colSums)); }}#include <iostream>#include <vector> int main() { int r, c; std::cin >> r >> c; std::vector<std::vector<int>> grid(r, std::vector<int>(c)); for (auto& row : grid) for (int& x : row) std::cin >> x; for (int i = 0; i < r; i++) { int sum = 0; for (int j = 0; j < c; j++) sum += grid[i][j]; std::cout << (i ? " " : "") << sum; } std::cout << "\n"; for (int j = 0; j < c; j++) { int sum = 0; for (int i = 0; i < r; i++) sum += grid[i][j]; std::cout << (j ? " " : "") << sum; } std::cout << "\n";}#include <stdio.h> int main(void) { int r, c, grid[50][50]; scanf("%d %d", &r, &c); for (int i = 0; i < r; i++) for (int j = 0; j < c; j++) scanf("%d", &grid[i][j]); for (int i = 0; i < r; i++) { int sum = 0; for (int j = 0; j < c; j++) sum += grid[i][j]; printf(i ? " %d" : "%d", sum); } putchar('\n'); for (int j = 0; j < c; j++) { int sum = 0; for (int i = 0; i < r; i++) sum += grid[i][j]; printf(j ? " %d" : "%d", sum); } putchar('\n'); return 0;}rc = コンソール.数読み();r = rc[0];c = rc[1];grid = [];繰り返す (i = 0; i < r; i++){ grid.追加(コンソール.数読み());}rowSums = [];繰り返す (i = 0; i < r; i++){ sum = 0; 繰り返す (j = 0; j < c; j++) { sum += grid[i][j]; } rowSums.追加(sum);}colSums = [];繰り返す (j = 0; j < c; j++){ sum = 0; 繰り返す (i = 0; i < r; i++) { sum += grid[i][j]; } colSums.追加(sum);}コンソール.書く(rowSums);コンソール.書く(colSums);