AIZU ONLINE JUDGE

AOJ ITP1 7_C(Spreadsheet)を解く

AOJ_ITP1_7_C

Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の7_C問題をC++とPython で解いてみました。

ITP1 のトピック7では、再び構造化プログラムについて学びます。「繰り返し処理や配列を組み合わせることで、構造化プログラミングの理解を深めます。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。

問題(7_C: Spreadsheet)

問題はリンク先をご覧ください。

AOJ ITP1 7_C問題:Spreadsheet

2重のループを使って、簡単な表計算を行います。

解答案

C++ プログラム例(ITP1 7_C)

行の合計を記憶する row_sum と列の合計を記憶する col_sum を用意します。行毎に処理をするため、row_sum は単変数、col_sum は配列となります。

最終行は、各列の合計(col_sum)を出力して、最後にその行の合計 row_sum を出力します。

#include <iostream>

using namespace std;

int main()
{
	int r, c;
	cin >> r >> c;

	int a[r][c];
	int row_sum = 0, col_sum[c] = {};

	for (int i = 0; i < r; ++i) {
		row_sum = 0;
		for (int j = 0; j < c; ++j) {
			cin >> a[i][j];
			row_sum += a[i][j];
			col_sum[j] += a[i][j];
			cout << a[i][j] << " ";
		}
		cout << row_sum << endl;
	}

	row_sum = 0;
	for (int j = 0; j < c; ++j) {
		row_sum += col_sum[j];
		cout << col_sum[j] << " ";
	}
	cout << row_sum << endl;

	return 0;
}

Python プログラム例(ITP1 7_C)

Python 版もロジックは、C++ 版と同じです。print では、* を付けて、リストの要素をすべて出力できるため、すっきり書けています。

r, c = map(int, input().split())
col_sum = [0] * c
for i in range(r):
    a = list(map(int, input().split()))
    for j in range(c):
        col_sum[j] += a[j]
    print(*a, sum(a))
print(*col_sum, sum(col_sum))

上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。

最後に

非常に簡単な場合ですが、表計算をシミュレーションできました。できることが増えてきました。

引き続き、ITP1 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA