過去問http://atcoder-scores.herokuapp.com/を解きます。
ABC065A – Expired?
問題
高橋君は胃が強いので、賞味期限をX日まで過ぎた食品を食べてもお腹を壊しません。 賞味期限をX+1日以上過ぎた食品を食べると、お腹を壊します。
また、賞味期限を過ぎずに食べると、おいしく感じます。そうでない場合、おいしく感じません。
高橋君は、賞味期限のA日前に食品を買ってきて、買ってからB日後に食べました。
高橋君が食品をおいしく感じた場合 delicious
を、おいしくは感じなかったがお腹は壊さなかった場合 safe
を、お腹を壊した場合 dangerous
を出力するプログラムを作成してください。
自分の回答
def expired(x, a, b)
if b <= a
puts "delicious"
elsif b <= a + x
puts "safe"
else
puts "dangerous"
end
end
x, a, b = gets.chomp.split(" ").map(&:to_i)
expired(x, a, b)
ちょっと考えました。問題が理解しにくかったら、状況を図で書いてみたりしてもいいかもしれません。
食べた日(b)が賞味期限(a)より小さかったら”delicious”、bが食べてもお腹を壊さない期間内(a+x)であれば、”safe”、それ以上は”dangerous”を出力すれば良いです。
ABC066A – ringring
問題
snuke 君は自転車を買いに来ました。snuke 君はすでに買う自転車を決めたのですが、その自転車にはベルが付いていないため、 自転車とは別にベルも買う必要があります。
snuke 君は安全意識が高いので、ベルをどちらの手でも鳴らせるよう、両方のハンドルに1つずつ 付けることにしました。
お店にあるベルは3種類で、それぞれ a円、b円、c円です。 この3つのうち、異なる2つのベルを選んで買うときの、値段の合計の最小値を求めて下さい。
自分の回答
def ringring(bells)
bells.sort!
p bells[0] + bells[1]
end
bells = gets.chomp.split(" ").map(&:to_i)
ringring(bells)
3つの値を配列(bells)に入れて、sortで低い順に並べて、最初の2つを足せば良いですね。
ABC067A – Sharing Cookies
問題
すぬけくんは3匹のヤギにクッキーを渡したいです。
すぬけくんはA枚のクッキーが入った缶と、b枚のクッキーが入った缶を持っています。 すぬけくんはA,B,A+Bのいずれかの枚数のクッキーをヤギたちに渡すことができます。
3匹のヤギが同じ枚数ずつ食べられるようにクッキーを渡すことが可能かどうか判定してください。
自分の回答
def sharing(a, b)
cookies = a + b
puts a % 3 == 0 || b % 3 == 0 || cookies % 3 == 0 ? "Possible" : "Impossible"
end
a, b = gets.chomp.split(" ").map(&:to_i)
sharing(a, b)
気をつけるところは、A,B,A+Bのいずれかさえ満たしていれば良いと言う点ですかね。3匹に分けるので、3で割って余りが0であれば良いです。
ABC068A – ABCxxx
問題
このコンテスト、つまり AtCoder Beginner Contest の略称は、アルファベット3文字で ABC となっております。
そして、ABCのうち特定の回を指すときは、何回目のABCかを3桁の数字で表して後ろに付け、ABC680のように呼びます。例えば ABC680 は、680回目の ABC のことを指します。
では、N回目のABCはどのように表すでしょうか、これを出力するプログラムを作成してください。
自分の回答
def abc(n)
puts "ABC#{n}"
end
n = gets.chomp
abc(n)
入力された数nをABCの後ろにくっつけてあげれば良いだけですね。
ABC069A – K-City
問題
K市には、東西方向にn本の通りがあり、南北方向にm本の通りがあります。 東西方向のそれぞれの通りは、南北方向のそれぞれの通りと交わっています。 東西南北を通りに囲まれた最小の領域を「街区」と呼びます。K市にある街区の個数を求めてください。
自分の回答
def city(a, b)
puts (a - 1) * (b - 1)
end
a, b = gets.chomp.split(" ").map(&:to_i)
city(a, b)
一見難しそうに思ましたが、そんな事はありませんでした。入力された数から1を引いて、それらを掛け合わせれば良いです。