Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の6_A問題をC++とPython で解いてみました。
ITP1 のトピック6では、配列について学びます。「データの列を1つの変数として管理する配列を習得します。」とあります。Python では、リストに該当します。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(6_A: Reversing Numbers)
問題はリンク先をご覧ください。
AOJ ITP1 6_A問題:Reversing Numbers
配列(リスト)の内容を逆順に出力する問題となります。
解答案
C++ プログラム例(ITP1 6_A)
問題説明では、配列と記しましたが、vector コンテナを使います。添え字を使い逆から出力します。vector の各要素の間の空白か改行を出力するために、文字列+添え字を使いました(17行目)。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
for (int i = n - 1; i >= 0; --i) {
cout << a[i] << " \n"[i == 0];
}
return 0;
}
添え字は、n – 1 から 0 まで繰り返しています。reverse 関数を使い、内容を逆順に変換しておけば、添え字を 0 から n 未満の見慣れている形式で出力することができます。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
reverse(a.begin(), a.end());
for (int i = 0; i < n; ++i) {
cout << a[i] << " \n"[i == n - 1];
}
return 0;
}
Python プログラム例(ITP1 6_A)
Python では、配列(vector コンテナ)はリストに相当します。C++ の最初の例のように添え字を使って逆から出力することもできますが、Python らしいプログラムではありません。
プログラムとしては、reverse したリストを出力する例のみ紹介します。
n = int(input())
a = list(map(int, input().split()))
a.reverse()
print(*a)
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
トピック6では、配列(リスト)について学んでいきます。配列(リスト)は、もっとも使われるデータ構造であるため、やりたいことが速く書けることも重要だと考えています。
引き続き、ITP1 の問題を紹介していきます。