はじめに
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~の類題もやっています
第 4 問(200 点)問題を解いています。
ABC 087 B - Coins
問題
あなたは、500円玉を A枚、100円玉を B枚、50円玉を C枚持っています。
これらの硬貨の中から何枚かを選び、合計金額をちょうど X円にする方法は何通りありますか。
同じ種類の硬貨どうしは区別できません。
2 通りの硬貨の選び方は、ある種類の硬貨についてその硬貨を選ぶ枚数が異なるとき区別されます。
標準入力
2
2
2
100
A = int(input())
B = int(input())
C = int(input())
X = int(input())
count = 0
for i in range(A+1):
for t in range(B+1):
for z in range(C+1):
if X == 500*i + 100*t + 50*z:
count = count + 1
print(count)
Cakes and Donuts
問題
ABC 洋菓子店では, 1個 4ドルのケーキと 1個 7ドルのドーナツが売られている.
このとき, 合計金額が Nドルとなる買い方はあるか, 判定せよ. ただし, 同じ商品を二個以上買っても良く, 買わない商品があっても良いものとする.
標準入力
11
作った解答
N = int(input())
count = 0
for i in range(100):
for t in range(100):
if N == 4*i + 7*t:
count = count + 1
if count > 0:
print("Yes")
else:
print("No")
ARC 004 A - 2点間距離の最大値
問題
平面上に N個の点があり、それぞれ0からN−1までの番号が付けられており、それぞれの点について x座標と y座標が与えられています。その N点のうち 2点を選び結んで得られる線分のうち、最も長くなる線分の長さを求めてください。
標準入力
3
1 1
2 4
4 3
自分で作った解答
2次元配列を作るのにやたら手間取る
#平方根を求めるのでつかう
import math
#2次元配列は決まっているのでAに2次元配列をいれる
N = int(input())
A = [list(map(int, input().split())) for _ in range(N)]
largest_length = 0.0
for number in range(0,N):
for number1 in range(0,N):
x = A[number][0] - A[number1][0]
y = A[number][1] - A[number1][1]
length = math.sqrt(x*x + y*y)
if largest_length < length:
largest_length = length
print(largest_length)
参考資料
2次元配列をどうすれば入れられるのかわからなかったので下記リンクで解決した
https://qiita.com/naz_/items/9eed47f5483679fa66b1
B - Sum of Three Integers
問題
2つの整数 K,Sが与えられます。
3つの変数 X,Y,Zがあり、0≦X,Y,Z≦Kを満たす整数の値を取ります。
X+Y+Z=Sを満たす X,Y,Zへの値の割り当ては何通りありますか。
入力例
2 2
解答
z = S - x - y
の関係性に気づけなくて自力で解けなかったので解答をみた。
かなしい
K, S = map(int, input().split())
count = 0
for x in reversed(range(0,K+1)):
for y in reversed(range(0,K+1)):
z = S - x - y
if z >= 0 and z <= K:
print("x",x,"y",y,"z",z)
count = count + 1
print(count)