AtCoder Beginner Contest 109 C
学んだこと
- 最小公倍数を求めるのにユークリッドの互除法を1行で実装。後置のwhile便利だなあ。
- inject便利だなあ。引数を指定しないと、最初のブロック引数にはarray[0]とarray[1]をとるのか。
- てかinteger#gcdあんのかい!調べる力不足…
他人の解答を見ずに書いたコード
n,X = gets.chomp.split.map(&:to_i) x = gets.chomp.split.map(&:to_i) # 出発点と都市の座標をソートして差分の配列dをつくる x.push(X).sort! d = (1..x.size-1).map{|i|x[i]-x[i-1]} # 2つの数の最小公倍数を求める def gcd(a,b) a,b = b,a%b while b != 0 return a end # 3つ以上の数の最小公倍数を求める def gcd_multi(array) array.inject{|a,b|gcd(a,b)} end # 配列dの最小公倍数を求める p gcd_multi(d)
他人の解答を見てから書いたコード
N,X = gets.split.map(&:to_i) x = gets.split.map{|t| t.to_i-X} p x.inject{|a,b| a.gcd(b)}.abs