| Заполни массив – по всякому |
|
|
Sunday, 26 March 2006 | Зэев Фрайман для раздела Ученье – свет Я хочу предложить вам несколько вариантов известной и, в основе своей, очень простой задачи на заполнение массивов случайными числами. Сначала – ее самый простой вариант, в потом – несколько вариантов посложнее; один из них лично мне был известен давно, потому что он в самых разных интерпретациях используется, например, для моделирования всякого рода «билетов спортивных лотерей», игры в карты и прочих вариантов. Другой я услышал в прошлом году от Жени – и он мне очень понравился, потому что оказалось, что в нем скрыты не только всякие там программистские приемчики, но и разные методические полезности для работы с учениками.
Вариант первый, простейший
Напиши программу, заполняющую массив случайными числами из введенного диапазона.
Примечание: в Java-варианте вводится также и размер массива.
class ex_array{
public static void fill(int m[],int n,int big){
for (int i=0;i m[i]=(int)(big*Math.random());
}
}
public static void view(int m[], int n){
for (int i=0;i IO.writeln("m["+i+"]="+m[i]);
}
IO.writeln("======Finish=========");
}
public static void main (String args[]){
int n=IO.readInt("Enter number of cells in array=");
int big=IO.readInt("Enter a biggest value for filled of array=");
int m[]=new int[n];
fill(m,n,big);
view (m,n);
}
}
Вариант посложнее
Заполнить массив случайными числами, но так, чтобы каждая следующая ячейка содержала значение большее, чем предыдущая.
Примечание: можно было бы написать просто «по возрастанию» – но я умышленно этого не делаю. Посмотрите на программу – она легко выдает такой вариант заполнения, к которому термин «по возрастанию» оказывается в предлагаемом варианте неприменим...
class ex_array_2{
public static void fill(int m[],int n,int big){
int floor=0;
for (int i=0;i m[i]=(int)((big-floor)*Math.random()+floor);
floor=m[i];
}
}
public static void view(int m[], int n){
for (int i=0;i IO.writeln("m["+i+"]="+m[i]);
}
IO.writeln("======Finish=========");
}
public static void main (String args[]){
int n=IO.readInt("Enter number of cells in array=");
int big=IO.readInt("Enter a biggest value for filled of array=");
int m[]=new int[n];
fill(m,n,big);
view (m,n);
}
}
Третий вариант: только по возрастанию
А вот исправленное и дополненное издание предыдущей программы – так, чтобы гарантировать заполнение только по возрастанию, не допуская достижения «потолка» в одной из промежуточных ячеек массива.
class ex_array_2{
public static void fill(int m[],int n,int big){
int floor=0;
for (int i=0;i int reserv=n-i;
m[i]=(int)(((big-reserv-floor)*Math.random())+floor);
floor=m[i];
IO.writeln(floor+".."+(big-reserv));
}
}
public static void view(int m[], int n){
for (int i=0;i
IO.writeln("m["+i+"]="+m[i]);
}
IO.writeln("======Finish=========");
}
public static void main (String args[]){
int n=IO.readInt("Enter number of cells in array=");
int big=IO.readInt("Enter a biggest value for filled of array=");
int m[]=new int[n];
fill(m,n,big);
view (m,n);
}
}
Н-да, получилось уже многовато для одного раза. Ладно, вариант с заполнением массива случайными неповторяющимися значениями – в следующий раз.
|