Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
 Аватар для JohnBlack123
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520

Сгенерировать упорядоченный по возрастанию массив в заданном диапазоне

01.02.2019, 10:48. Показов 6731. Ответов 12

Студворк — интернет-сервис помощи студентам
Добрый день.
Нужно сгенерировать упорядоченный по возрастанию массив. В функцию передается диапазон - [a,b].
Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
void RandIcreaseArray(int cnt, int *arr, int a, int b)
{
    for (int i = 0; i < cnt; i++)
    {
        if (a < b) // если а меньше b,
            arr[i] = a++; // то заполняем этот элемент а++
        else // или
            arr[i] = b; // заполняем числом b
    }
}
Пример работы МОЕГО решения :
Code
1
2
3
4
size of array = 10;
a = 1;
b = 5;
arr : 1 2 3 4 5 5 5 5 5 5 ;
Подскажите, пожалуйста, как решить это лучше. Возможно, получится реализовать с функцией rand().


Добавлено через 13 минут
З.Ы.: Хотелось чтобы работало примерно так:
Code
1
2
3
4
size of array = 5;
a = 1;
b = 20;
arr : 1 7 10 13 17;
З.Ы.Ы: Вариант сгенерировать массив, а потом его отсортировать не походит
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2019, 10:48
Ответы с готовыми решениями:

Сгенерировать массив из N неповторяющихся четных чисел в заданном диапазоне
Создать функцию, которая генерирует массив из N элементов неповторяющихся четными числами в диапазоне K.M

Случайным образом сгенерировать массив из 20 чисел (в заданном диапазоне)
Создать программу на С++, в которой случайным образом генерируется массив из 20 чисел (в диапазоне от -50.0 до 40.0) типа float....

Упорядоченный по неубыванию массив превратить в упорядоченный по возрастанию, оставив уникальные элементы
Благоустроенный за неубывания массив B с n элементов превратить в упорядоченный по возрастанию , оставив по одному в каждой группе...

12
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.02.2019, 10:57
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
Пример работы МОЕГО решения :
При таких условиях создать требуемый массив невозможно.
0
 Аватар для JohnBlack123
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
01.02.2019, 11:07  [ТС]
Байт, хорошо.
Вот еще примеры работы моей программы:
Code
1
2
3
4
size of array = 5;
a = 1;
b = 20;
arr : 1 2 3 4 5;
Code
1
2
3
4
size of array = 10;
a = 3;
b = 100;
arr : 3 4 5 6 7 8 9 10 11 12;
Добавлено через 1 минуту
Цитата Сообщение от Байт Посмотреть сообщение
При таких условиях создать требуемый массив невозможно
Но все же, программа работает
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.02.2019, 11:10
JohnBlack123, Все у вас правильно. В чем дело-то?
Или формулируйте здание адекватно.

Добавлено через 1 минуту
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
Но все же, программа работает
Работать-то она работает. Только делает не то, что заявлено
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
упорядоченный по возрастанию массив.
0
 Аватар для JohnBlack123
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
01.02.2019, 11:13  [ТС]
Байт,
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
Подскажите, пожалуйста, как решить это лучше. Возможно, получится реализовать с функцией rand()
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
З.Ы.: Хотелось чтобы работало примерно так:
Код
size of array = 5;
a = 1;
b = 20;
arr : 1 7 10 13 17;
Мое решение не идеально. Хочу узнать как решить это лучше.

Добавлено через 2 минуты
Цитата Сообщение от Байт Посмотреть сообщение
Работать-то она работает. Только делает не то, что заявлено
В других примерах вроде бы выполняет поставленную задачу.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.02.2019, 11:18
JohnBlack123, Все, что я мог сказать, я сказал. Отписываюсь
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
01.02.2019, 11:31
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
Возможно, получится реализовать с функцией rand().
Получится. Генерируешь число и проверяешь аналогично, больше оно предыдущего или нет. Если да, присваиваешь элементу массива это число, иначе генерируешь снова, пока не выпадет больше. Но. Есть одно большое но. Нужен тогда счетчик "кручений" придумывать. Допустим, у тебя первый же элемент выпадет максимальным из диапазона, тогда ты никогда не сгенерируешь число больше и программа намертво зависнет, генерируя чиселки)

Добавлено через 3 минуты
JohnBlack123, как вариант, можно генерировать в set, там автоматом сортирует, нужно только мощность дождаться, пока не будет равна количеству элементов
1
13 / 11 / 5
Регистрация: 14.09.2018
Сообщений: 88
01.02.2019, 11:59
SuperKir, а что если в функцию передавать диапазон значений, из которого нужно производить выборку (не просто счётчик рандомных значений, а конкретный диапазон). Далее по какому-то алгоритму мы пропускаем в этом диапазоне какое-то количество значений и берём следующее. И так пока не заполним результирующую выборку из того диапазона.

Зачем что-то генерировать?
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
01.02.2019, 12:08
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
Нужно сгенерировать упорядоченный по возрастанию массив. В функцию передается диапазон - [a,b].
Если длина массива определяется диапазоном, то решить задачу можно, если же длина заранее задана, то тут уже есть сложности.

Добавлено через 58 секунд
Если длина массива будет больше, чем диапазон, то можно сгенерировать неубывающую последовательность, возрастающую не получится.

Добавлено через 1 минуту
Если же длина массива меньше диапазона, то можно брать числа не подряд.

PS: Использовать rand() можно, но она с большой вероятностью дает повторы чисел, особенно в небольших диапазонах.
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
01.02.2019, 12:52
Цитата Сообщение от QwertyJacksonX Посмотреть сообщение
Зачем что-то генерировать?
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
Нужно сгенерировать упорядоченный по возрастанию массив
0
13 / 11 / 5
Регистрация: 14.09.2018
Сообщений: 88
01.02.2019, 14:17
SuperKir, "нужно сгенерировать" не означает использование генератора случайных чисел. Просто "генерируешь", как заблагорассудится.

Добавлено через 7 минут
Цитата Сообщение от jugu Посмотреть сообщение
Если же длина массива меньше диапазона, то можно брать числа не подряд.
Я об этом и говорю. Где вообще сказано, что числа должны быть подряд? Если они подряд, то просто for (...) a[i] = i

Добавлено через 1 минуту
Вот же сказано, как нужно.
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
З.Ы.: Хотелось чтобы работало примерно так:
C++
1
2
3
4
size of array = 5;
a = 1;
b = 20;
arr : 1 7 10 13 17;
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
01.02.2019, 14:18
QwertyJacksonX, а что, по твоему, означает "генерируешь как заблагорассудится"?
Есть несколько основных вариантов заполнить массив:
1. Ввести с клавиатуры
2. Сгенерировать рандомно
*3. Скопировать значения откуда-либо.

Цитата Сообщение от QwertyJacksonX Посмотреть сообщение
"нужно сгенерировать" не означает использование генератора случайных чисел.
Как можно "генерировать" иначе?
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
01.02.2019, 14:49
Лучший ответ Сообщение было отмечено JohnBlack123 как решение

Решение

Как вариант.
C++
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
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <algorithm>
#include <iostream>
#include <random>
using namespace std;
 
template <typename RandomGenerator>
void generate(int *arr, size_t n, int a, int b, RandomGenerator &gen) {
    if (static_cast<int>(n) >= (b - a + 1)) {
        for (size_t i = 0; i < n; i++) {
            arr[i] = a;
            if (a < b) {
                ++a;
            }
        }
    }
    else {
        int left = a;
        int right = b - static_cast<int>(n) + 1;
        for (size_t i = 0; i < n; i++) {
            uniform_int_distribution<> dist(left, right);
            arr[i] = dist(gen);
            left = arr[i] + 1;
            ++right;
        }
    }
}
 
int main() {
    random_device rd;
    mt19937 gen(rd());
 
    size_t n;
    cout << "n = ";
    cin >> n;
 
    int a, b;
    cout << "a = ";
    cin >> a;
    cout << "b = ";
    cin >> b;
    if (a > b) {
        swap(a, b);
    }
 
    int *arr = new int[n];
    generate(arr, n, a, b, gen);
 
    for (size_t i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
 
 
    delete[] arr;
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2019, 14:49
Помогаю со студенческими работами здесь

Получить массив С(К). упорядоченный по возрастанию, путем слияния массивов A(N) и В(М). упорядоченных по возрастанию (К = N + М).
Получить массив С(К). упорядоченный по возрастанию, путем слияния массивов A(N) и В(М). упорядоченных по возрастанию (К = N + М). ...

Получить массив С(К), упорядоченный по возрастанию, путем слияния массивов A(N) и B(M), упорядоченных по возрастанию (K = N + M)
Ребята выручите пожалуйста! Получить массив С(К), упорядоченный по возрастанию, путем слияния массивов A(N) и B(M), упорядоченных по...

Сгенерировать случайные числа с плавающей точкой в заданном диапазоне, включающем и отрицательные значения
возникла проблема, не могу решить... раньше когда пользовался функ. ( x + rand() % x ) с целыми числами было все хорошо, но у меня есть...

Массив: Сформируйте массив C[n+m], состоящий из элементов массивов А и В, упорядоченный по возрастанию.
написать программы! Вот задания! Я болел и просто не успею все зделать! 1)Дан массив целых чисел. Воспользовавшись указателями,...

Сгенерировать одномерный массив A в диапазоне [-20; 20] и сформировать новый массив B из отрицательный элементов массива
Здравствуйте. Помогите, пожалуйста, дорешать задачу. Нужно сгенерировать одномерный массив A в диапазоне и сформировать новый массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru