AtCoder APG4bをPythonで解く(Ex11~15)

投稿日:  更新日:2022/09/02

Atcoder Python

B!
Daniel AgreloによるPixabay(https://pixabay.com/)からの画像

こんにちは, Shinoryoです.

今回はC++入門 AtCoder Programming Guide for beginners(APG4b)を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います.

EX11 - 電卓をつくろう2

計算の回数が分かっているので, for文で計算をループさせます. 「1:4」のような計算結果の出力には, 複数の変数を文字列に埋め込んで出力する方法である文字列メソッドformat()を用いて記述するとよいでしょう. 除算の際のB=0のときのエラー処理では, breakでループ処理から抜け出します.

n = int(input())
a = int(input())
for i in range(n):
op, b = input().split()
b = int(b)
if op == "+":
a += b
print("{0}:{1}".format(i+1,a))
elif op == "-":
a -= b
print("{0}:{1}".format(i+1,a))
elif op == "*":
a *= b
print("{0}:{1}".format(i+1,a))
else:
if b == 0:
print("error")
break
a = int(a/b)
print("{0}:{1}".format(i+1,a))

EX12 - 足したり引いたり

文字列sの長さを取得するには, len()を用います. 下の例では, 例えば文字列sの長さが9の場合(問題文の条件より必ず奇数になります), range(len(s)/2)では9/2=4.5の小数点以下を切り捨てた値4を得て, i=0,1,2,3でループします. それぞれのループで(2i+1)番目の文字列が+かそうでないかを判定しています. 足したり引いたりする数字は必ず1なので, 1と書いてしまっています.

s = input()
ans = 1
for i in range(int(len(s)/2)):
if s[2*i+1] == "+":
ans += 1
else:
ans -= 1
print(ans)

EX13 - 平均との差

当初は平均取得の際にNumPyを用いていましたが, 実行時間・メモリともに増加したのでやめました. a = [int(x) for x in input().split()]の部分で入力された整数で構成されたリストを作成し(リスト内包表記; 以前の問題でも使っていました), その後はsum()でリストの合計を出した後にNで割ることで平均を計算しています. 偏差の絶対値を求める際にはabs()を用いています.

n = int(input())
a = [int(x) for x in input().split()]
ave = int(sum(a) / n)
for i in range(n):
print(abs(a[i] - ave))

EX14 - 三人兄弟の身長差

EX13のときと同じように入力を受け付けた後で, sorted()を用いてリストをソートしています. その後で, CAを出力すれば問題ないでしょう.

a, b, c = sorted([int(x) for x in input().split()])
print(c-a)

EX15 - 三人兄弟へのプレゼント

問題にあるプログラムをPythonで記述すると, 次のようになるでしょうか. Pythonでは, 関数はdefで定義され, 戻り値はreturnで指定されます. また, sum()input()は定義済みであるため, 関数の名前を変えてみます.

def defsum(scores):
# The program should be written
def defoutput(sum_a, sum_b, sum_c):
# The program should be written
def definput(n):
vec = [int(x) for x in input().split()]
return vec
n = int(input())
a = definput(n)
b = definput(n)
c = definput(n)
sum_a = defsum(a)
sum_b = defsum(a)
sum_c = defsum(a)
output(sum_a, sum_b, sum_c)

Pythonで問題になっている関数を書くと, 以下のようになると思います. Pythonが便利すぎて, もはや改めて関数を定義する意味がなくなってきていますね.

def defsum(scores):
return sum(scores)
def defoutput(sum_a, sum_b, sum_c):
print(sum_a*sum_b*sum_c)
def definput(n):
vec = [int(x) for x in input().split()]
return vec
n = int(input())
a = definput(n)
b = definput(n)
c = definput(n)
sum_a = defsum(a)
sum_b = defsum(b)
sum_c = defsum(c)
defoutput(sum_a, sum_b, sum_c)

参考にしたサイト等

関連記事

Search

About Me

自分の写真
理系大学生でした. Bloggerを利用して発信を行っています.

Labels

Blog Archives