AtCoder Beginner Contest 156 過去問 (A~C)
参照
A問題
AtCoderの仕組みがわかりました。
とりあえぜ表示レーティングを上げるには、
10回以上コンテストに参加しないと不利らしいです。
n,r=map(int,input().split()) if n>=10: print(r) else: print(r+100*(10-n))
B問題
再帰関数の基礎となる問題。
10進数をn進数へ変換する問題です。
再帰関数を活用する上で重要事項は3つ。
以下のコードでは、
nとqの商が0になった時に再帰関数のループは終了します。
n=11,q=2の場合 11/2 + '1' ー5ー5/2 + '1' ー2ー2/2 + '0' ー1ー1/2 + '1' ー0 剰余は深い戻り値を先頭になるので'1011'
def base10toq(n,q): if int(n/q): return base10toq(int(n/q),q)+str(n%q) return str(n%q) n,k=map(int,input().split()) print(len(base10toq(n,k)))
C問題
問題は最小二乗法の最小総和を求める問題です。
要素数がNで、Xiは各要素の値です。
1≤N≤100、1≤Xi≤100なので、二重ループが可能です。
数列の授業で習った総和の展開公式でも活用して、
数学的に解く問題かと思いきや、割とゴリ押し。
n=int(input()) x=list(map(int, input().split())) min_=10**9 for i in range(min(x),max(x)+1,1): sum_=0 for j in range(n): sum_+=(x[j]-i)**2 if sum_<min_: min_=sum_ print(int(min_))