Ruby/Практикум/Массивы
Материал из Викиучебника
[править] Массивы
[править] Дан целочисленный массив. Необходимо найти количество элементов, расположенных после последнего максимального.
Возможное решение:
maccuB = [1,3,4,2] n = maccuB.max s = maccuB.rindex(n) m = maccuB.size k = m - s - 1
Замечания по решению:
Возможное решение:
m = [1,2,3,2,3,2,1,2] p m[m.rindex(m.max)+1..-1].size
Замечания по решению:
Возможное решение:
arr = [1,6,4,5,23,7,8,23,1,4] p arr.reverse.index(arr.max)
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти индекс минимального элемента.
Возможное решение:
maccuB = [342,762,32,1237] p( maccuB.index(maccuB.min) )
Замечания по решению:
[править] Дан целочисленный массив и натуральный индекс (число, меньшее размера массива). Необходимо определить является ли элемент по указанному индексу глобальным максимумом.
Возможное решение:
massivcheg = [3,4,7,8] n = 3 p (massivcheg[n] == massivcheg.max)
Замечания по решению:
Возможное решение:
a,n=[9,1,5,7,3,6,4,2,5,2],5 p a[n]==a.max
Замечания по решению:
[править] Дан целочисленный массив. Вывести индексы массива в том порядке, в котором соответствующие им элементы образуют убывающую последовательность.
Возможное решение:
maccuB = [1, 2, 3, 5, 4, 2, 3, 4] p (0...maccuB.size).sort_by{ |i| maccuB[i] }.reverse
Замечания по решению:
[править] Дан целочисленный массив и натуральный индекс (число, меньшее размера массива). Необходимо определить является ли элемент по указанному индексу глобальным минимумом.
Возможное решение:
m = [5, 6, 7, 9, 10, 3, 2]; i = 5 m[i] == m.min
Замечания по решению:
Возможное решение:
maccuB = [1, 2, 3, 4, 5, 6, 7] uHgekc = 0 p( maccuB[uHgekc] == maccuB.min )
Замечания по решению:
[править] Дан целочисленный массив. Необходимо осуществить циклический сдвиг элементов массива влево на три позиции.
Возможное решение:
maccuB = [1, 2, 3, 4, 5, 6, 7] p maccuB[3...maccuB.size] + maccuB[0..2]
Замечания по решению:
Возможное решение:
a = [1, 2, 3, 4, 5, 6, 7] p( a[3...a.size] + a[0..2] )
Замечания по решению:
Возможное решение:
a = [1, 2, 3, 4, 5, 6, 7] b = a.push(a.shift) c = b.push(b.shift) d = c.push(c.shift) p d
Замечания по решению:
Возможное решение:
a = [1,2,3,12,3,4,5,7,0,7,12,9,6] 3.times {|i|(a << a[0]).shift} p a
Замечания по решению:
Достаточно было во второй строчке:
3.times{a<<a.shift}
[править] Дан целочисленный массив. Необходимо осуществить циклический сдвиг элементов массива вправо на две позиции.
Возможное решение:
m = [1, 3, 4, 5, 6] p( m[-2..-2] + m[-1..-1] + m[0..-3] )
Замечания по решению:
Возможное решение:
arr = [1,2,3,4,5,6] 2.times{arr.unshift(arr.pop)} p arr
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти индексы двух наименьших элементов массива.
Возможное решение:
m = [1, 2, 3] a = m.min m1 = m-[m.min] b = m1.min p(m.index(a), m.index(b))
Замечания по решению: Не работает, если в массиве более одного минимума (например, [1,2,1,3]).
Возможное решение:
a = [1,2,3,12,3,4,5,7,0,7,12,9,6] p a.sort.slice(0...2).map { |item| a.index(item) }
Замечания по решению: Не работает, если в массиве более одного минимума (например, [1,2,1,3]).
Возможное решение:
arr = [1,0,2,0,3,12,3,4,5,7,7,12,9,6] m = [arr.index(arr.min)] arr1 = arr arr1[m[0]] = arr1.max+1 p m << arr1.index(arr1.min)
Замечания по решению: Решение с учетом возможности наличия в массиве двух и более минимумов.
Возможное решение:
a=[1,4,3,1,5,6,3] p Array(0...a.size).sort_by{|i|a[i]}.first 2
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти элементы, расположенные перед последним минимальным.
Возможное решение:
m = [1,2,3,4,5,6,7,1] a = m.rindex( m.min ) p m[0...a]
Замечания по решению:
[править] Даны два массива. Необходимо найти количество совпадающих по значению элементов.
Возможное решение:
a = [0, 2] m = [2, 3] p (a&m).size
Замечания по решению:
[править] Дан целочисленный массив, в котором лишь один элемент отличается от остальных. Необходимо найти значение этого элемента.
Возможное решение:
m = [1,1,1,9,1] d = (m.sort[0] - m.sort[-1]) - m.sort[1] p d
Замечания по решению:
1. Возвращает значение со знаком "-" (что не является искомым значением).
2. Работает неверно, если искомое значение - отрицательное (например, [1,1,1,-9,1]).
Возможное решение:
massive-[massive.sort[1]]
Замечания по решению:
[править] Дан целочисленный массив. Необходимо переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами.
Возможное решение:
maccuB = [1, 2, 3, 4] b = maccuB.min c = maccuB.max a = maccuB.index( b ) d = maccuB.index( c ) maccuB[a+1..d-1] = maccuB[a+1..d-1].reverse p maccuB
Замечания по решению:
Возможное решение:
m = [1, 2, 3, 4] p [m.min] + (m - ([m.min]+[m.max])).reverse + [m.max]
Замечания по решению:
Возможное решение:
arr = [7,3,0,4,3,2,9,1] mn, mx = arr.index(arr.min), arr.index(arr.max) mn,mx = mx,mn if mn > mx arr [mn+1...mx]=arr[mn+1...mx].reverse p arr
Замечания по решению: Решение с учетом возможности расположения в массиве максимального элемента перед минимальным.
Возможное решение:
a=[3,2,9,6,3,-4,1] b=[a.index(a.min),a.index(a.max)].sort p a[0..b[0]]+a[b[0]+1...b[1]].reverse+a[b[1]..a.size]
Замечания по решению:
[править] Дан целочисленный массив. Необходимо разместить элементы, расположенные до минимального, в конце массива.
Возможное решение:
m = [1,2,3,45,6,0,23,3,54,3] p (m[m.index(m.min)..-1]+m[0..m.index(m.min)-1])
Замечания по решению: Работает не правильно если, минимумом является первый элемент массива.
Возможное решение:
arr = [7,3,0,4,3,2,9,1] (0...arr.index(arr.min)).each{arr<<arr.shift} p arr
Замечания по решению:
Возможное решение:
a=[-7,7,1,9,-9,3,5,3] a.index(a.min).times{a<<a.shift} p a
Замечания по решению:
[править] Дан целочисленный массив и интервал a..b. Необходимо найти количество элементов в этом интервале.
Возможное решение:
m=[1,2,3,4,5] a,b=1,3 p m[a..b].size
Замечания по решению: Не верно если, a>b.
Возможное решение:
a,i1,i2=[2,6,9,4,5,2,6,4,9,6],6,2 i=[i1,i2].sort p a[i[0]+1...i[1]].size
Замечания по решению:
[править] Дан целочисленный массив. Необходимо определить количество пропущенных чисел.
Возможное решение:
a = [1,5,8] d = (a.min..a.max).to_a - a p d.size
Замечания по решению:
Возможное решение:
array = [3, 4, 6, 8] a = array.max b = array.min c = array.size p( a-b+1-c )
Замечания по решению:
Возможное решение:
array=[6,9,3,0,8] p array.max-array.min-array.uniq.size+1
Замечания по решению:
[править] Дан целочисленный массив и натуральный индекс (число, меньшее размера массива). Необходимо определить является ли элемент по указанному индексу локальным минимумом.
Возможное решение:
m = [1,2,3,4,5,7]; i = 3 c = m[i] < m[i-1] d = m[i] < m[i+1] c == d
Замечания по решению:
Возможное решение:
a=maccuB[n] b=maccuB[n+1] c=maccuB[n-1] (a<b)&&(a<c)
Замечания по решению:
Возможное решение:
array,index=[2,7,4,2,4,1,8,9,5,3],[4] p array[index-1..index+1].min==array[index]
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти элементы, расположенные между первым и вторым максимальным.
Возможное решение:
m = [2, 10, 5, 4, 10, 5, 10] a = m.index( m.max ) b = m[0..a] c = m[a+1..-1] g = c.index( c.max ) + b.size
Замечания по решению:
Решение не верное, точнее недописанное. Нужна строчка p m[a + 1...g]
Возможное решение:
a = [1,2,3,12,3,0,12,7,4,7,12,9,6] b = a[(a.index(a.max) + 1)..-1] p b[0...b.index(b.max)]
Замечания по решению:
Возможное решение:
m = [1,2,3,12,3,0,12,7,4,7,12,9,6] fmin = m.index(m.max) smin = (m[fmin+1..-1].index(m[fmin+1..-1].max)) + (fmin + 1) p m[fmin+1 ... smin]
Замечания по решению:
[править] Дан целочисленный массив. Необходимо поменять местами минимальный и максимальный элементы массива.
Возможное решение:
m = [3, 2, 1, 7] a = m.max b = m.min d = m.index( a ) c = m.index( b ) m[ d ] = b m[ c ] = a p m
Замечания по решению:
Возможное решение:
c=m.index(m.max) b=m.index(m.min) a=m.max m[c]=m[b] m[b]=a
Замечания по решению:
Возможное решение:
a = [1,2,3,2,3,0,5,7,4,7,12,9,6] imin, imax = a.index(a.min), a.index(a.max) a[imin], a[imax] = a.max, a.min p a
Замечания по решению:
[править] Даны два массива. Необходимо найти количество не совпадающих по значению элементов.
Возможное решение:
maccuB1 = [1,2,3] maccuB2 = [3,4,5] p( (maccuB1-maccuB2).size + (maccuB2-maccuB1).size )
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти количество минимальных элементов.
Возможное решение:
p m.sort.rindex(m.min)+1
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти элементы, расположенные перед первым минимальным.
Возможное решение:
m = [1,2,1,4,3] a = m.index(m.min) m[0...a]
Замечания по решению:
[править] Дан целочисленный массив. Необходимо осуществить циклический сдвиг элементов массива вправо на одну позицию.
Возможное решение:
m = [1, 2, 3, 4] p [ m[-1] ] + m[0..-2]
Замечания по решению:
Возможное решение:
a=[1,2,3,4] a.unshift(a.pop)
Замечания по решению:
Возможное решение:
maccuB=[1,1,2,3,1,2,3] zer=maccuB.size-1 na=maccuB[1..zer] dub=maccuB[0] na.push(dub)
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти все пропущенные числа.
Возможное решение:
a = [1,5,8] (a.min..a.max).to_a - a
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти элементы, расположенные после первого максимального.
Возможное решение:
m = [1, 2, 3, 4, 1, 2] m[m.index( m.max )+1 .. -1]
Замечания по решению:
Возможное решение:
maccuB = [1,2,3,4,2,3,1,2,3] x = maccuB.index( maccuB.max ) maccuB[x+1..-1].size
Замечания по решению:
[править] Дан целочисленный массив и интервал a..b. Необходимо найти количество минимальных элементов в этом интервале.
Возможное решение:
maccuB = [2, 2, 2, 3, 2, 2] a,b = 3,5 p( maccuB[a..b].sort.rindex( maccuB.min ) )
Замечания по решению:
Неверное решение - должно быть p( maccuB[a..b].sort.rindex( maccuB.min )+ 1)
Возможное решение:
arr = [7,3,4,6,0,3,6,9,0] d=1..3 p arr[d].select{|e| e==arr.min}.size
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти два наименьших элемента.
Возможное решение:
m = [1, 3, 3, 8] m = m.uniq m = m.sort p m.shift p m.shift
Замечания по решению:
Возможное решение:
m = [1,2,3,2,1,2,3] p m.sort.uniq[0..1]
Замечания по решению:
Возможное решение:
mac = [1, 3, 7, 5, 8, 11] p mac.min mac.delete( mac.min ) p mac.min
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти два наибольших элемента.
Возможное решение:
m=m.sort.uniq p m.pop p m.pop
Замечания по решению:
Возможное решение:
maccuB = [6,9,3,4,2,5,1] maccuB.max maccuB.delete(maccuB.max) maccuB.max
Замечания по решению:
Возможное решение:
arr = [7,3,4,6,0,3,6,0,9,1] p arr.sort.uniq[-2..-1]
Замечания по решению:
[править] Дан целочисленный массив и интервал a..b. Необходимо найти максимальный из элементов в этом интервале.
Возможное решение:
m[a..b].max
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти количество элементов между первым и последним минимальным.
Возможное решение:
m = [1,0,0,1,0,0,1] a = m.index(m.min) b = m.rindex(m.min) m[a+1...b]
Замечания по решению:
Т.к. в задании требуется найти количество элементов, то m[a+1...b].size
Возможное решение:
arr = [6,0,3,1,0,6,0,9,1] p (arr.rindex(arr.min) - arr.index(arr.min) - 1)
Замечания по решению:
[править] Дан целочисленный массив. Необходимо осуществить циклический сдвиг элементов массива влево на одну позицию.
Возможное решение:
m=maccuB.shift maccuB.push(m)
Замечания по решению:
Возможное решение:
maccuB = [1, 2, 3, 4, 5] maccuB[1..-1] + [ m[0] ]
Замечания по решению:
[править] Дан целочисленный массив. Необходимо найти элементы, расположенные между первым и последним максимальным.
Возможное решение:
macc = [7,5,1,3,7] _max = macc.max _ind = macc.index(_max) _rind = macc.rindex(_max) _a = _ind + 1 _b = _rind - 1 macc[_a.._b]
Замечания по решению:
Возможное решение:
maccuB=[1,2,4,9,5,7,8,3] a=maccuB.index(maccuB.max) maccuB=maccuB[a+1..-1].reverse a=maccuB.index(maccuB.max) maccuB=maccuB[0..a-1].reverse
Замечания по решению:
Возможное решение:
max=array.max p array[array.index(max)+1..array.rindex(max)-1]
Замечания по решению:
[править] Дан целочисленный массив и интервал a..b. Необходимо проверить наличие максимального элемента массива в этом интервале.
Возможное решение:
m = [1, 3, 4, 5, 6] a,b = 1,5 p m.max == m[a..b].max
Замечания по решению:
Возможное решение:
maccuB = [1,1,3,1,1] a = 0 b = 5 p( maccuB[a..b].include?( maccuB.max ) )
Замечания по решению:
[править] Дан целочисленный массив и натуральный индекс (число, меньшее размера массива). Необходимо определить является ли элемент по указанному индексу локальным максимумом.
Возможное решение:
m = [1, 2, 4, 2, 5, 7] i = 3 (m[i] < m[i-1]) && (m[i] < m[i+1])
Замечания по решению:
Возможное решение:
m = [4, 3, 8, 8, 9, 7, 6, 7, 8, 5] n = 8 p( (m[n-1] < m[n])&&(m[n] > m[n+1]) )
Замечания по решению: