Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の4_D問題をC++とPython で解いてみました。
ITP1 のトピック4では、計算について学びます。「計算式に用いられる様々な演算子を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(4_D: Min, Max and Sum)
問題はリンク先をご覧ください。
AOJ ITP1 4_D問題:Min, Max and Sum
一連の数列を読み取り、最小値、最大値、合計を求めます。
解答案
C++ プログラム例(ITP1 4_D)
最小値、最大値は、条件分岐を使って求めることができます。
別の方法としては、algorithm をインクルードすれば、min、max を使ってすっきり書くことができます。最小値、最大値の初期値として、問題の制限から外れた値を設定しています(8、9行目)。
最大100万の値が、最大1万個あるため、合計の最大値は100億になります。32ビット整数は、約20億までの数字しか格納できないため、合計の値は、long long int 型の整数 sum に格納します(10行目)。(この記述は、2023年2月19日に追記しました。)
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
int minimum = 1000001;
int maximum = -1000001;
long long int sum = 0;
cin >> n;
for (int i = 0; i < n; ++i) {
int data;
cin >> data;
minimum = min(minimum, data);
maximum = max(maximum, data);
sum += (long long int)data;
}
cout << minimum << " " << maximum << " " << sum << endl;
return 0;
}
min や max は関数名として予約されています。変数名と重複しないように注意する必要があります。
Python プログラム例(ITP1 4_D)
Python の組込み関数 min、max、sum はすべてリストを入力とすることができます。そのため、すっきりと書くことができます。
Python の整数型は、C++と異なり大きさに制約がありません。
n = int(input())
a = list(map(int, input().split()))
print(min(a), max(a), sum(a))
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
トピック4の計算として最後となる問題でした。「プログラミング入門」(ITP1)を始めたときと比較して、複雑なことが書けるようになってきました。
引き続き、ITP1 の問題を紹介していきます。