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]) )

Замечания по решению: