Le troisième défi.
Un exemple d'utilisation de l'instruction case, mais notez tout et passez
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
Réécrit correctement avec une déclaration de cas.
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
Si la sortie est longue, il est plus judicieux de la couper et d'ajouter 3 points à la fin, plutôt que de diviser la sortie en cas.
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
Puisque les coordonnées de la pointe des deux aiguilles peuvent être obtenues, la distance entre les deux points peut être calculée directement. En traitant chaque valeur numérique comme un entier, elle est devenue la moitié AC moitié WA du cas de test, donc après avoir réfléchi pendant un moment, convertissez-la en float et AC. Comme mentionné dans l'explication, la résolution avec le théorème du cosinus réduit la quantité de calcul de 3 fonctions triangulaires, mais est-ce correct parce qu'il n'y a pas de boucle?
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)
Si l'aiguille courte est utilisée comme axe de coordonnées, le calcul pour deux fonctions triangulaires sera réduit.
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)
J'ai abandonné parce que je ne pouvais pas résoudre le problème D après avoir lu le problème D pendant plus de 60 minutes ici. La seule façon de contester D / E / F est de résoudre un exemple d'algorithme et de l'acquérir. Il semble qu'il soit nécessaire de traiter un certain nombre de questions classiques passées afin de ne pas dépendre de compétences de puissance comme le problème A cette fois.
Recommended Posts