AOJの プログラミング入門 トピック10にチャレンジしました。
トピック10 数学関数
関数を使った問題が4問です。
10_A:Distance
2点間の座標から距離を求める問題です。
3平方の定理を用いて作成しました。入力データが少数だったので型をfloat型にしました。
import math
x1,y1,x2,y2 = map(float,input().split())
z1 = (x2-x1)**2 + (y2-y1)**2
print(math.sqrt(z1))
10_B:Triangle
三角形の2辺 a, b とその間の角 C から、その三角形の面積 S、周の長さ L, a を底辺としたときの高さ h を求める問題です。
面積は (1/2) x a x b x sinθ
周の長さは c2 = a2 + b2 − 2ab cos α
高さは 面積 x 2 x a
角度は「度」で入力されるのでラジアンに変換して計算しました。
import math
a,b,c = map(int,input().split())
rad = math.radians(c)
#面積 S
S = 0.5 * math.sin(rad) * a * b
print(S)
#周の長さc2
c1 = a*a + b*b - 2*a*b*math.cos(rad)
c2 = math.sqrt(c1)
print(c2+a+b)
#高さ h
h = S * 2 / a
print(h)
10_C:Standard Deviation
10_Cは標準偏差を求める問題です。
分散は以下の式で求められ、分散の平方根が標準偏差となります。
(人数:n、得点:s、平均点:m)
α2 = (∑ni=1(si - m)2)/n
計算を順番に実行するだけで、素直に作成できました。
import math
while True :
#人数
n = int(input())
if n == 0 :
break
else :
#人数分の得点
list_n = list(map(int,input().split()))
#平均
avg = sum(list_n) / len(list_n)
#分散
sss = 0
for iii in range(len(list_n)):
sss = sss + (list_n[iii]-avg)**2
sss = sss/n
#標準偏差 s
s = math.sqrt(sss)
print(s)
10_D:Distance Ⅱ
ミンコフスキー距離を求める問題です。
math.fabsで絶対値を作成しました。
2乗根、3乗根は x**(1/2)、x**(1/3)で行いました。
import math
n = int(input())
list_x = list(map(int,input().split()))
list_y = list(map(int,input().split()))
#p=1
d1= 0
for iii in range(n):
d1 = d1 + math.fabs(list_x[iii] - list_y[iii])
print(d1)
#P=2
d2 = 0
for iii in range(n):
d2 = d2 + ( math.fabs(list_x[iii] - list_y[iii]) ) **2
print(d2**(1/2))
#P=3
d3 = 0
for iii in range(n):
d3 = d3 + ( math.fabs(list_x[iii] - list_y[iii]) ) **3
print(d3**(1/3))
#p=無限
list_d=[]
for iii in range(n):
list_d.append(math.fabs(list_x[iii] - list_y[iii]))
print(max(list_d))