AIZU ONLINE JUDGE

AOJ ITP1 4_D(Min, Max and Sum)を解く

AOJ_ITP1_4_D

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 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA