Часто нужно сгенерировать массив случайных чисел некоторого типа. Причём имеется верхняя и нижняя граница элементов этого массива.
Проще всего решить такую задачу генерируя случайные числа в цикле for.
Для примера рассмотрим генерацию двух случайных массивов - вещественного и целочисленного. В каждом из них будет 10 элементов. И элементы каждого из массивов будут от 1 до 5. Все эти константы Вы можете поменять на какие-нибудь свои. Для удобства оформим генерацию каждого из массивов с помощью отдельной функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <iostream> // подключение функций ввода/вывода using namespace std; // чтобы не записывать std::cin //генерируем целый случайный массив void int_massiv() { // определяем переменные int a[10]; int i; srand(time(0)); // инициализация генерации случайных чисел //генерируем целый случайный массив из 10 эелментов от 1 до 5 for (i = 0; i < 10; i++) a[i] = 1 + rand() % 5; for (i = 0; i < 10; i++) cout<<a[i]<<" "; // вывод результата на экране } //генерируем вещественный случайный массив void double_massiv() { // определяем переменные double b[10]; int i; srand(time(0)); // инициализация генерации случайных чисел //генерируем вещественный случайный массив из 10 эелментов от 1 до 5 for (i = 0; i < 10; i++) b[i] = 1.0 + 4.0 * rand() / (float)RAND_MAX; for (i = 0; i < 10; i++) cout<<b[i]<<" "; // вывод результата на экране } int main() { int_massiv(); cout<<"\n"; double_massiv(); cin.get(); // ожидаем нажатия пользователем клавиши } |
Доброго времени суток. Никак не могу дойти до правильного решения, прошу помочь:
Заполнить одномерный массив размером 200 элементов случайными и не повторяющимися числами в диапазоне 1 – 200. Перемешать данные в массиве таким образом, чтобы модуль разности любых соседних чисел был не меньше чем 5
Его можно оптимизировать, тогда сложно будет.
Общая идея такая
for(i=0;i<200;i++)
{
//нужен ли сдвиг
sdvig=0;
while(svdig<5)
{
again=1;
while(again==1)
{
again=0;
//предварительно
b = 1 + rand() % 200;
//Дальше проверка, что такого ещё нет
for(j=0;j<i;j++)
if (b==a[j]) again=1;
}
//Дальше проверка разницы
if (abs(b-a[i-1])<5) sdvig++;
else break;
}
if (sdvig==5) //сдвиг
{
for(j=0;j<i-1;j++)
a[j]=a[j+1];
i=i-2;
}
else a[i]=b;
}
Как можно вывести сумму случайных чисел
Не понятно, что нужно. Если два случайных числа сгенерировать и сложить, то попробуйте немного переделать программу со страницы случайное число.