Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の7_C問題をC++とPython で解いてみました。
ITP1 のトピック7では、再び構造化プログラムについて学びます。「繰り返し処理や配列を組み合わせることで、構造化プログラミングの理解を深めます。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(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 の問題を紹介していきます。