Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の7_A問題をC++とPython で解いてみました。
ITP1 のトピック7では、再び構造化プログラムについて学びます。「繰り返し処理や配列を組み合わせることで、構造化プログラミングの理解を深めます。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(7_A: Grading)
問題はリンク先をご覧ください。
繰り返し、条件判定を行う問題となります。
解答案
C++ プログラム例(ITP1 7_A)
プログラム全体の構造は、5_A と同じになります。終了条件(m、f、r がすべて -1)を満たすまで、定義された手順で成績を判定して出力を繰り返します。
#include <iostream>
using namespace std;
int main()
{
int m, f, r;
while (1) {
cin >> m >> f >> r;
if ((m == -1)&&(f == -1)&&(r == -1)) {
break;
}
if ((m == -1)||(f == -1)) {
cout << "F" << endl;
} else if (m + f >= 80) {
cout << "A" << endl;
} else if (m + f >= 65) {
cout << "B" << endl;
} else if (m + f >= 50) {
cout << "C" << endl;
} else if (m + f >= 30) {
if (r >= 50) {
cout << "C" << endl;
} else {
cout << "D" << endl;
}
} else {
cout << "F" << endl;
}
}
return 0;
}
Python プログラム例(ITP1 7_A)
Python も、C++ 版と同じ構造としました。
while True:
m, f, r = map(int, input().split())
if m == -1 and f == -1 and r == -1:
break
if m == -1 or f == -1:
print("F")
elif m + f >= 80:
print("A")
elif m + f >= 65:
print("B")
elif m + f >= 50:
print("C")
elif m + f >= 30:
if r >= 50:
print("C")
else:
print("D")
else:
print("F")
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
トピック7では、いままで学んだことを組み合わせて使います。文法を学ぶための Toy プログラムから、実用面を意識したプログラムを書けるようになってきました。
引き続き、ITP1 の問題を紹介していきます。