Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の5_A問題をC++とPython で解いてみました。
ITP1 のトピック5では、構造化プログラムについて学びます。「制御構造や文を組み合わせる構造化プログラミングの基礎を身に付けます。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(5_A: Print a Rectangle)
問題はリンク先をご覧ください。
AOJ ITP1 5_A問題:Print a Rectangle
縦と横を繰り返し読みながら、繰り返しが必要な出力を行います。
解答案
C++ プログラム例(ITP1 5_A)
プログラム全体の構造は、3_B や 3_C と同じになります。終了条件(読み込んだ縦と横が共に0)を満たすまで、繰り返し ‘#’ を並べた長方形を出力します。
#include <iostream>
using namespace std;
int main()
{
int h, w;
while (1) {
cin >> h >> w;
if ((h == 0)&&(w == 0)) {
break;
}
for (int i = 0; i < h; ++i) {
for (int j = 0; j < w; ++j) {
cout << "#";
}
cout << endl;
}
cout << endl;
}
return 0;
}
Python プログラム例(ITP1 5_A)
Python では、横一行を表すリストを繰り返しを使わずに定義します(6行目)。読み込んだ縦の数だけ、横一行を表すリストを出力します。リストの各要素を個別の引数として与えるために “*” を付けています。また、各引数の間を空白ではなく、空文字にするため、sep を空文字に指定しています(9行目)。
while True:
h, w = map(int, input().split())
if h == 0 and w == 0:
break
line = ["#"] * w
for i in range(h):
print(*line, sep="")
print("")
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
トピック5では、トピック4までに学んだことを組み合わせて使います。
引き続き、ITP1 の問題を紹介していきます。