pontz_rwのブログ

プログラミング等の備忘録

Volume0: 0002

桁数 | Aizu Online Judge

数値の桁数を求める問題

解答

整数の桁数を求めるので、文字列に変換し、文字列の長さを求めれば良い

while True:
    try:
        # 入力から2つの整数を受け取る
        a, b = [int(i) for i in input().split()]
        # 2つの整数を足し、文字列に変換した後、その文字列の長さを出力する
        print(len(str(a + b)))
    except EOFError:
        break

reduceを使用し、入力値のリストを縮約しても良い

from functools import reduce

while True:
    try:
        print(reduce(lambda a, b: len(str(a + b)), [int(i) for i in input().split()]))
    except EOFError:
        break

Volume0: 0001

山の高さ | Aizu Online Judge

ソートに関する問題

解答

リストを降順に並べ替えて、上から3つ切り出せば良い

# 山の高さ10個のデータ
mountains = [int(input()) for _ in range(10)]
# 山の高さが高い順に3件分、ループで取り出す
for height in sorted(mountains, reverse=True)[:3]:
    # 山の高さを出力
    print(height)

一行で書く

print(*sorted([input() for _ in range(10)])[::-1][:3], sep='\n')

Volume0: 0000

九九 | Aizu Online Judge

九九を出力する問題

解答

二重ループを利用する

# 掛けられる数 i
for i in range(1, 10):
    # 掛ける数 j
    for j in range(1, 10):
        # 九九を出力
        print(f'{i}x{j}={i * j}')

一行で書く

[print(f'{i}x{j}={i * j}') for i in range(1, 10) for j in range(1, 10)]

ITP1_10_D: Distance II

ミンコフスキー距離 | プログラミング入門 | Aizu Online Judge

数学に関する問題

解答

問題文で与えられた数式をコードにしていきます。

まず、xとyの距離をそれぞれ計算します。

次に、求めた距離をそれぞれp乗し、その合計を求めます。

そして、求めた合計をpの逆数乗します。

# coding: utf-8

n = input()
xs = map(float, input().split())
ys = map(float, input().split())
abs_d = [abs(x - y) for (x, y) in zip(xs, ys)]
d = [sum([i ** p for i in abs_d]) ** (1 / p) for p in range(1, 4)]
d.append(max(abs_d))

print(*d, sep='\n')

ITP1_10_C: Standard Deviation

標準偏差 | プログラミング入門 | Aizu Online Judge

数学に関する問題

解答1

問題文で与えられた数式をコードにしていきます。

# coding: utf-8

while True:
    n = int(input())
    if n == 0:
        break

    s = list(map(float, input().split()))
    m = sum(s) / n

    a_2 = sum([(x - m) ** 2 for x in s]) / n
    print(a_2 ** 0.5)

解答2

標準ライブラリにあるpstdev()メソッドを使用します。

# coding: utf-8
from statistics import pstdev

while True:
    n = int(input())
    if n == 0:
        break

    s = list(map(float, input().split()))
    print(pstdev(s))

ITP1_10_B: Triangle

三角形 | プログラミング入門 | Aizu Online Judge

数学に関する問題

三角形の面積 S は、

$$ S = \frac{1}{2}ab\sin{C} $$

c の長さは、 c^{2} = a^{2} + b^{2} - 2ab \cos{C} より、

$$ c = \sqrt{a^{2} + b^{2} - 2ab \cos{C}} $$

高さ h は、S = a \times h \div 2 より、

$$ h = \frac{2S}{a} $$

解答

# coding: utf-8
import math

a, b, C = map(float, input().split())
S =  0.5 * a * b * math.sin(C * math.pi / 180)
L = a + b + (a ** 2 + b ** 2 - 2 * a * b * math.cos(C * math.pi / 180)) ** 0.5
h = 2 * S / a

print("%f\n%f\n%f" % (S, L, h))

ITP1_10_A: Distance

距離 | プログラミング入門 | Aizu Online Judge

2点間の距離を求める問題

2点間の距離は、

\sqrt{(x_2 - x_1)^{2} + (y_2 - y_1)^{2}}

で求めることができます。

解答

# coding: utf-8

x1, y1, x2, y2 = map(float, input().split())
print(((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5)