本記事では「レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう】」で紹介されているAOJの「Introduction To Programming I」の40問をPythonで解説します。
目次
入門
プログラミングの入門として、基本構造、変数、入出力、計算式を学習します。
ITP1_1_A Hello World
print("Hello world")
AIZU ONLINE JUDGE ITP1_1_Aをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_1_A へは以下から 問題:Hello World “Hello World” と標準出力にプリントするプログラムを作成してください。 Input この問題に入力は…
ITP1_1_B X:Cubic
x = int(input())
result = x ** 3
print(result)
AIZU ONLINE JUDGE ITP1_1_Bをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_1_B へは以下から 問題:x の 3 乗 1つの整数 x を読み込んで、x の3乗を計算し結果を出力するプログラムを作成して…
ITP1_1_C Rectangle
a, b = map(int, input().split())
area = a * b
perimeter = 2 * a + 2 * b
print(area, perimeter)
AIZU ONLINE JUDGE ITP1_1_Cをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_1_C へは以下から 問題:長方形の面積と周の長さ たて a cm よこ b cm の長方形の面積と周の長さを求めるプログラ…
ITP1_1_D Watch
S = int(input())
h = S // 3600
m = (S % 3600) // 60
s = S % 60
print(f"{h}:{m}:{s}")
AIZU ONLINE JUDGE ITP1_1_Dをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_1_D へは以下から 問題:時計 秒単位の時間 S が与えられるので、hh:mm:ss の形式へ変換して出力してください。ここで…
条件分岐
条件によって実行する内容を変え、処理の流れを制御する構造文を学習します。
ITP1_2_A Small, Large, or Equal
a, b = map(int, input().split())
if a < b:
print("a < b")
elif a > b:
print("a > b")
else:
print("a == b")
AIZU ONLINE JUDGE ITP1_2_Aをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_2_A へは以下から 問題:大小関係 2つの整数 a, b を読み込んで、a と b の大小関係を出力するプログ…
ITP1_2_B Range
a, b, c = map(int, input().split())
if a < b < c:
print("Yes")
else:
print("No")
AIZU ONLINE JUDGE ITP1_2_Bをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_2_B へは以下から 問題:範囲 3つの整数a, b, cを読み込み、それらが a < b < cの条件を満たすならば”Yes”を、満たさないならば…
ITP1_2_C Sorting Three Numbers
numbers = list(map(int, input().split()))
sorted_numbers = sorted(numbers)
print(" ".join(map(str, sorted_numbers)))
AIZU ONLINE JUDGE ITP1_2_Cをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_2_C へは以下から 問題:3 つの数の整列 3つの整数を読み込み、それらを値が小さい順に並べて出力するプログラムを作成して下さい。 I…
ITP1_2_D Circle in a Rectangle
W, H, x, y, r = map(int, input().split())
if x - r >= 0 and x + r <= W and y - r >= 0 and y + r <= H:
print("Yes")
else:
print("No")
AIZU ONLINE JUDGE ITP1_2_Dをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_2_D へは以下から 問題:長方形の中の円 長方形の中に円が含まれるかを判定するプログラムを作成してください。次のように、長方形は左…
繰り返し処理
条件に従って処理を繰り返し、反復処理を行う構造文を学習します。
ITP1_3_A Print Many Hello World
for _ in range(1000):
print("Hello World")
AIZU ONLINE JUDGE ITP1_3_Aをpythonで解いてみた
本サイトAIZU ONLINE JUDGE ITP1_3_A へは以下から 問題:複数の Hello World の出力 1000 個の “Hello World” を出力するプログラムを作成して下さい。 Input この問題…
ITP1_3_B Print Test Cases
num_lst = []
num = 0
while True:
num = int(input())
if num == 0:
break
num_lst.append(num)
for i in range(len(num_lst)):
print('Case {}: {}'.format(i+1, num_lst[i]))
【解説】はこちら
ITP1_3_C Swapping Two Numbers
while True:
x, y = map(int, input().split())
if x == 0 and y == 0:
break
elif x < y:
print(x, y)
else:
print(y, x)
【解説】はこちら
ITP1_3_D How Many Divisors?
a, b, c = map(int, input().split())
cnt = 0
for i in range(a, b + 1):
if c % i == 0:
cnt += 1
print(cnt)
【解説】はこちら
計算
計算式に用いられる様々な演算子を学習します。
ITP1_4_A A/B Problem
a, b = map(int, input().split())
print('{0} {1} {2:.5f}'.format(a//b, a % b, a/b))
【解説】はこちら
ITP1_4_B Circle
import math
r = float(input())
print('{0:.6f} {1:.6f}'.format(r*r*math.pi, 2*r*math.pi))
または
from math import pi
r = float(input())
print('{0:.6f} {1:.6f}'.format(r*r*pi, 2*r*pi))
【解説】はこちら
ITP1_4_C Simple Calculator
while True:
a, op, b = map(str, input().split())
a = int(a)
b = int(b)
if op == "?":
break
elif op == "+":
print(int(a + b))
elif op == "-":
print(int(a - b))
elif op == "*":
print(int(a * b))
elif op == "/":
print(int(a / b))
else:
pass
または
while True:
table = input().split()
a = int(table[0])
op = table[1]
b = int(table[2])
if op == "?":
break
elif op == "+":
print(int(a + b))
elif op == "-":
print(int(a - b))
elif op == "*":
print(int(a * b))
elif op == "/":
print(int(a / b))
else:
pass
【解説】はこちら
ITP1_4_D Min, Max and Sum
n = int(input())
get_lst = list(map(int, input().split()))
print(min(get_lst), max(get_lst), sum(get_lst))
【解説】はこちら
構造化プログラムI
制御構造や文を組み合わせる構造化プログラミングの基礎を身に付けます。
ITP1_5_A Print a Rectangle
while True:
H, W = map(int, input().split())
if H == 0 and W == 0:
break
for i in range(H):
print("#"*W)
print()
【解説】はこちら
ITP1_5_B Print a Frame
while True:
H, W = map(int, input().split())
if H == 0 and W == 0:
break
for i in range(H):
for k in range(W):
if i == 0 or i == H-1 or k == 0 or k == W-1:
print("#", end="")
else:
print(".", end="")
print()
print()
【解説】はこちら
ITP1_5_C Print a Chessboard
while True:
H, W = map(int, input().split())
if H == 0 and W == 0:
break
for i in range(H):
for j in range(W):
if (i+j) % 2 == 0:
print("#", end="")
else:
print(".", end="")
print()
print()
【解説】はこちら
ITP1_5_D Structured Programming
n = int(input())
for i in range(1, n+1):
if i % 3 == 0 or "3" in str(i):
print(" {}".format(i), end="")
print()
【解説】はこちら
配列
データの列を1つの変数として管理する配列を習得します。
ITP1_6_A Reversing Numbers
n = int(input())
get_lst = list(map(int, input().split()))
get_lst.reverse()
print(*get_lst)
【解説】はこちら
ITP1_6_B Finding Missing Cards
all_cards = [(s, n) for s in ['S', 'H', 'C', 'D'] for n in range(1, 14)]
n = int(input())
hold_cards = []
for _ in range(n):
suit, num = input().split()
num = int(num)
hold_cards.append((suit, num))
for card in all_cards:
if card not in hold_cards:
print(*card)
【解説】はこちら
ITP1_6_C Official House
houses = [[[0 for r in range(10)] for f in range(3)] for b in range(4)]
n = int(input())
for i in range(n):
b, f, r, v = map(int, input().split())
houses[b - 1][f - 1][r - 1] += v
for b in range(4):
for f in houses[b]:
print('', *f)
if b != 3:
print('#' * 20)
【解説】はこちら
ITP1_6_D Matrix Vector Multiplication
n, m = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(n)]
b = [int(input()) for _ in range(m)]
for i in range(n):
sum = 0
for j in range(m):
sum += A[i][j] * b[j]
print(sum)
【解説】はこちら
構造化プログラムII
繰り返し処理や配列を組み合わせることで、構造化プログラミングの理解を深めます。
ITP1_7_A Grading
while True:
m, f, r = map(int, input().split())
if m == f == r == -1:
break
if m == -1 or f == -1 or m + f < 30:
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:
pass
【解説】はこちら
ITP1_7_B How many ways?
while True:
n, x = map(int, input().split())
if n == 0 and x == 0:
break
cnt = 0
for i in range(1, n-1):
for j in range(i+1, n):
if j < x - i - j <= n:
cnt += 1
print(cnt)
または
while True:
n, x = map(int, input().split())
if n == 0 and x == 0:
break
cnt = 0
for i in range(1, n + 1):
for j in range(i+1, n + 1):
for k in range(j+1, n + 1):
if i + j + k == x:
cnt += 1
print(cnt)
【解説】はこちら
ITP1_7_C Spreadsheet
r, c = map(int, input().split())
sheet = [list(map(int, input().split())) for i in range(r)]
for i in range(r):
sheet[i].append(sum(sheet[i]))
Column_sum = [0]*(c+1)
for j in range(c+1):
for k in range(r):
Column_sum[j] += sheet[k][j]
for i in range(r):
print(*sheet[i])
print(*Column_sum)
【解説】はこちら
ITP1_7_D Matrix Multiplication
n, m, l = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(n)]
B = [list(map(int, input().split())) for _ in range(m)]
for i in range(n):
C = []
for j in range(l):
tmp = 0
for k in range(m):
tmp += A[i][k] * B[k][j]
C.append(tmp)
print(*C)
【解説】はこちら
文字
プログラムで文字を扱う方法を学習します。
ITP1_8_A Toggling Cases
words = input()
print(words.swapcase())
【解説】はこちら
ITP1_8_B Sum of Numbers
while True:
str_x = input()
if str_x == "0":
break
ans = 0
for n in str_x:
ans += int(n)
print(ans)
【解説】はこちら
ITP1_8_C Counting Characters
import sys
texts=sys.stdin.read()
texts=texts.lower()
cnt=[0]*26
letters='abcdefghijklmnopqrstuvwxyz'
for x in texts:
i=0
for y in letters:
if x==y:
cnt[i]+=1
i+=1
for i in range(26):
print(letters[i]+" : "+str(cnt[i]))
【解説】はこちら
ITP1_8_D Ring
s = input()
p = input()
s = s * 2
if s.find(p) != -1:
print('Yes')
else:
print('No')
【解説】はこちら
文字列
文字列処理の基礎を学習します。
ITP1_9_A Finding a Word
word = input()
cnt = 0
while True:
sentence = input()
if sentence == "END_OF_TEXT":
break
else:
cnt += sentence.lower().split().count(word)
print(cnt)
ITP1_9_B Shuffle
while True:
cards = input()
if cards == "-":
break
m = int(input())
for _ in range(m):
sh = int(input())
former = cards[:sh]
later = cards[sh:]
cards = later+former
print(cards)
【解説】はこちら
ITP1_9_C Card Game
n = int(input())
T = 0
H = 0
for i in range(n):
card_t, card_h = input().split()
if card_t == card_h:
T += 1
H += 1
else:
if card_h > card_t:
H += 3
else:
T += 3
print(T, H)
【解説】はこちら
ITP1_9_D Transformation
text = input()
q = int(input())
for _ in range(q):
order = input().split()
a, b = map(int, order[1:3])
if order[0] == "print":
print(text[a:b+1])
elif order[0] == "reverse":
re_text = text[a:b+1]
text = text[:a]+re_text[::-1]+text[b+1:]
else:
text = text[:a]+order[3]+text[b+1:]
【解説】はこちら
数学関数
基礎的な数学関数を学習します。
ITP1_10_A Distance
import math
x1, y1, x2, y2 = map(float, input().split())
print(math.hypot(x2 - x1, y2 - y1))
【解説】はこちら
ITP1_10_B Triangle
import math
a, b, C = map(int, input().split())
rad = math.radians(C)
S = 0.5*a*b*math.sin(rad)
h = 2*S/a
c = math.sqrt(a**2+b**2-2*a*b*math.cos(rad))
L = a+b+c
print(S, L, h, sep="\n")
【解説】はこちら
ITP1_10_C Standard Deviation
while True:
n = int(input())
if n == 0:
break
score = list(map(int, input().split()))
mean = sum(score)/n
var_sum = 0
for i in range(n):
var_sum += (score[i]-mean)**2
print((var_sum/n)**0.5)
【解説】はこちら
ITP1_10_D Distance II
n = int(input())
X = list(map(int, input().split()))
Y = list(map(int, input().split()))
# p=1,2,3
for p in range(1, 4):
print("{0:.6f}".format(sum([abs(a-b)**p for a, b in zip(X, Y)])**(1/p)))
# p=infinity
print("{0:.6f}".format(max([abs(a-b) for a, b in zip(X, Y)])))
【解説】はこちら
コメント