The third challenge.
An example for using a case statement, but write down everything and pass
abc168a.rb
n = gets.chomp.to_s[-1,1]
#puts n
#puts n[-1,1]
if n=="3"
    puts "bon"
else
    if  n== "0"
    puts "pon"
    else
        if n== "1"
        puts "pon"
        else
            if n== "6"
                puts "pon"
            else
                if n=="8"
                    puts "pon"
                else
                    puts "hon"
                end
            end
        end
    end
end
Rewrote it properly with a case statement.
case.rb
n = gets.chomp.to_s[-1,1]
case n 
when "3"
    puts "bon"
when "0","1","6","8"
    puts "pon"
else
    puts "hon"
end
If the output is long, it is smarter to cut it out and add 3 dots at the end, rather than dividing the output into cases.
abc168b.rb
k = gets.chomp.to_i
s = gets.chomp.to_s
if s.length <= k
    puts s
else
    print s[0..k-1]
    print "..."
end 
Since the coordinates of the tip of both needles can be obtained, the distance between the two points can be calculated directly. Since each numerical value was treated as an integer and became half AC and half WA of the test case, I thought about it for a while and converted it to float and AC. As mentioned in the explanation, solving with the cosine theorem reduces the amount of calculation by three trigonometric functions, but is this okay because there is no loop?
abc168c.rb
imput = gets.chomp.split(" ").map!{|item| item.to_i}
a = imput[0].to_f
b = imput[1].to_f
h = imput[2].to_f
m = imput[3].to_f
hang = Math::PI*(30*h + m/2)/180
mang = Math::PI*m*6/180
hy = Math.sin(hang)*a
hx = Math.cos(hang)*a
my = Math.sin(mang)*b
mx = Math.cos(mang)*b
puts Math.sqrt((hy-my)**2 + (hx-mx)**2)
If the short hand is used as the coordinate axis, the calculation for two trigonometric functions will be reduced.
abc168c.rb
imput = gets.chomp.split(" ").map!{|item| item.to_f}
a = imput[0]
b = imput[1]
h = imput[2]
m = imput[3]
hang = Math::PI*(30*h + m/2)/180
mang = Math::PI*m*6/180
ang = mang - hang
mx = Math.cos(ang)*b
my = Math.sin(ang)*b
puts Math.sqrt((a-mx)**2 + (my)**2)
I gave up because I couldn't solve the D problem after reading the D problem for more than 60 minutes around here. The only way to challenge D / E / F is to solve the algorithm example and acquire it. It seems that it is necessary to handle a number of standard past questions so as not to depend on power skills like the A problem this time.
Recommended Posts