線形探索メニュー
線形探索についての詳しい解説は下記の講座で説明されています。
STEP: 1 指定された値の個数
n = gets.to_i
a = gets.split.map(&:to_i)
k = gets.to_i
puts a.count(k)
STEP: 2 指定された値の位置 1
n = gets.to_i
a = gets.split.map(&:to_i)
k = gets.to_i
if a.include?(k)
puts a.index(k) + 1
else
puts 0
end
STEP: 3 指定された値の位置 2
n = gets.to_i
a = gets.split.map(&:to_i)
k = gets.to_i
ans = 0
(n - 1).downto(0) do |i|
if a[i] == k
ans = i + 1
break
end
end
puts ans
FINAL問題 【指定された値の探索】指定された値の位置 3
n = gets.to_i
a = gets.split.map(&:to_i)
k = gets.to_i
(0...n).each do |i|
if a[i] == k
puts i + 1
end
end
STEP: 1 2変数の最大最小
a = gets.split.map(&:to_i)
puts "#{a.max} #{a.min}"
STEP: 2 10変数の最大最小
a = gets.split.map(&:to_i)
puts "#{a.max} #{a.min}"
FINAL問題 【最大最小】n 変数の最大最小
n = gets.to_i
a = gets.split.map(&:to_i)
puts "#{a.max} #{a.min}"
STEP: 1 偶数の探索
n = gets.to_i
a = gets.split.map(&:to_i)
(0...n).each do |i|
if a[i].even?
puts i + 1
break
end
end
STEP: 2 奇数の探索
n = gets.to_i
a = gets.split.map(&:to_i)
(n - 1).downto(0) do |i|
if a[i].odd?
puts i + 1
break
end
end
STEP: 3 条件付き最小値
n = gets.to_i
a = gets.split.map(&:to_i)
k = gets.to_i
ans = 1000
a.each do |i|
if k <= i
ans = [i, ans].min
end
end
puts ans
STEP: 4 条件付き最大値
n = gets.to_i
a = gets.split.map(&:to_i)
k = gets.to_i
ans = -1000
a.each do |i|
if k >= i
ans = [i, ans].max
end
end
puts ans
STEP: 5 点と点の距離
n = gets.to_i
a = n.times.map { gets.split.map(&:to_i) }
k = gets.to_i
xn, yn = a[-1]
count = 0
n.times do |i|
x, y = a[i][0], a[i][1]
if (x - xn).abs + (y - yn).abs <= k
count += 1
end
end
puts count
問題文だとわかりにくいですが、点nとは入力される値の中の最後のxとyのことです。
STEP: 6 長方形に含まれる点
n = gets.to_i
a = n.times.map { gets.split.map(&:to_i) }
xs, xt = gets.split.map(&:to_i)
ys, yt = gets.split.map(&:to_i)
count = 0
n.times do |i|
x, y = a[i][0], a[i][1]
if xs <= x && x <= xt && ys <= y && y <= yt
count += 1
end
end
puts count
STEP: 7 成績優秀者の列挙 1
n = gets.to_i
a = n.times.map { gets.chomp.split }
k = gets.to_i
n.times do |i|
s, t = a[i][0], a[i][1].to_i
if k <= t
puts s
end
end
FINAL問題 【特殊な探索】 成績優秀者の列挙 2
n = gets.to_i
a = n.times.map { gets.chomp.split }
k, l = gets.split.map(&:to_i)
n.times do |i|
s, t = a[i][0], a[i][1].to_i
if k <= t && t <= l
puts s
end
end
STEP: 1 2番目に大きな値
n = gets.to_i
a = gets.split.map(&:to_i)
a.sort!
puts a[n - 2]
FINAL問題 【第 k 要素の探索】k番目に大きな値
n = gets.to_i
a = gets.split.map(&:to_i)
k = gets.to_i
puts a.sort[-k]