NeoNox Green Kakadu 2NetFly вообще эта задача для С++ но по понятным причинам я её перевел для перла, конечно на перле такие вещи не делаються...
ИХМО правильный вариант на perl:
-----------------------------------------------------------------------------------------
#!/usr/bin/perl -w
use strict;
my @arr_m=(1,54,21,30,4,5,6,7,8,99);
my @arr_n;
my $n=2;
map {$arr_n[$_]=$arr_m[$_]} (0..$n);
for (my $i=$n; $i<=$#arr_m; $i++)
{
my $min_pos=0;
map {$min_pos=$_ if ($arr_n[$_]<$arr_n[$min_pos])} (0..$n);
$arr_n[$min_pos] = $arr_m[$i] if ($arr_n[$min_pos] < $arr_m[$i]);
}
------------------------------------------------------------------------
идея понятна?
а вот реализация этого на С++:
------------------------------------------------------------------------
#include
#define C_BIG_SIZE 15
#define C_SMALL_SIZE 5
int main(void)
{ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int aSource[C_BIG_SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 64, 33, 45, 21 };
int aResult[5];
// Заполняем результат маленького массива первыми C_SMALL_SIZE значениями
for (int j = 0; j < C_SMALL_SIZE; j++) { aResult[j] = aSource[j]; }
// Проходим по всем элементам большого массива
for(int i = C_SMALL_SIZE; i < C_BIG_SIZE; i++)
{
// Ищем минимальный элемент в маленьком массиве
int iMinPos = 0;
for (int j = 0; j < C_SMALL_SIZE; j++)
{
if (aResult[j] < aResult[iMinPos]) { iMinPos = j; }
}
// Если найденны минимальный элемент меньше чем текущий элемент в большом массиве
// заменяем этот минимальный элемент на элемент из большого массива
if (aResult[iMinPos] < aSource) { aResult[iMinPos] = aSource; }
}
cout << "Result: ";
for (int j = 0; j < 5; j++) { cout << " " << aResult[j]; }
cout << endl;
}
--------------------------------------------------------------------------
P.S. задача мне очень понравилась...
кстати подобные задачи используються для тестирования программистов при приёме на работу в крупные компании... аля rambler... в частности задача была взята у них...