Создать диапазон чисел в C++
мне нужна помощь в определении диапазона чисел. У меня ошибка в коде и результат выглядит так:
Input: rangeStart = 1, rangeEnd = 23, periodLength = 10 Output: 1 2 3 4 5 6 7 8 9 10 11-20 21 22 23
Мне нужно, чтобы это было:
Input: rangeStart = 1, rangeEnd = 23, periodLength = 10 Output: 1-10 11-20 21 22 23
std::stringstream OptimizeDate(int rangeStart, int rangeEnd, std::string periodType, int periodLength) < std::stringstream res; if (periodType == "whole")< for (int i = rangeStart; i else < res > > return res; >
Буду признателен за любой ответ
Отслеживать
задан 23 дек 2022 в 11:10
71 5 5 бронзовых знаков
Вы только не написали, что должно быть по условию. Задача как звучит?
23 дек 2022 в 11:46
Думаю что целые декады нужно выводить через дефис, отдельные дни по краям диапазона — по отдельности.
23 дек 2022 в 12:49
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Лишние вызовы функций, создание объектов и арифметические действия, тормозят программу.Часто лучше просто генерировать числа с заданным шагом и стартовым значением, пока не достигли конца. Представлю вариант:
std::stringstream out; int rangeStart = 1, rangeEnd = 23, periodLength = 10; int k = rangeEnd / periodLength; while (k--) < out while (rangeStart
Отслеживать
ответ дан 23 дек 2022 в 13:38
AR Hovsepyan AR Hovsepyan
15.9k 3 3 золотых знака 13 13 серебряных знаков 30 30 бронзовых знаков
Определить диапазон чисел в C / C ++
Есть ли способ, чтобы я мог разделить диапазон чисел на определенные поддиапазоны то есть. Если мы имеем диапазон 1-10 Пользователь вводит 1 3, 4 7, 7 10 и мы определяем диапазон 1-3 как часть одного диапазона, 4-7 как другой и так далее. и если вводится число 8, например, мы получаем выход как диапазон 3. Рассматривал создание массива int arr [10] и как пользовательские входы 1 3, например, тогда arr [0] = 1 и arr [2] = 1, затем для 4 7 как arr [ 3] = 2 и arr [6] = 2. Но это пропускает числа между ними, и если мы зацикливаем от 0 до 2 и от 3 до 6. В большем масштабе с массивом дольше 10 это будет неэффективно. Может кто-нибудь мне помочь?
user3501236 05 апр. 2014, в 17:20
Генерирование случайных чисел. Функции rand() , srand() , time() . Примеры
В языке C++ существуют средства для генерирования случайных чисел. Чтобы сгенерировать случайное число используется функция rand() , которая размещается в библиотечном файле stdlib.h . Синтаксис объявления функции следующий:
int rand();
Функция возвращает случайное целочисленное значение, которое лежит в пределах от 0 до 32767.
Пример.
#include #include using namespace std; void main() < // Получить случайное число int x; x = rand(); cout "x color: #008000;">// Получить еще одно случайное число int y; y = rand(); cout "y color: #333300;">⇑2. Функция srand(). Назначение. Пример
Если несколько раз запустить текст программы из п. 1, то будет получен один и тот же результат (одни и те же числа). Значит, сама по себе функция rand() генерирует одни и те же последовательности чисел. Чтобы получить разные последовательности чисел нужно объединить функцию rand() с функцией srand().
Функция srand() из библиотеки stdlib.h предназначена для установки начальной точки, из которой происходит генерирование случайных чисел. Синтаксис объявления функции следующий:
void srand(unsigned int startValue);здесь startValue – целочисленное значение, которое служит отправной точкой для генерирования последовательности случайных чисел функцией rand() . Изменяя значение startValue , можно получать разные последовательности случайных чисел.
Пример.
#include #include using namespace std; void main() < // Установить начальную точку генерирования последовательности srand(55); // Получить случайное число int x; x = rand(); cout "x color: #008000;"> // Получить еще одно случайное число int y; y = rand(); cout "y color: #333300;">⇑3. Функция time(). Назначение. Сочетание функций rand(), srand(), time(). Пример
Как видно из примера в п. 2, последовательность случайных чисел изменилась. Если в функции srand() вместо числа 55 установить другое число, то будет получена другая последовательность. Однако, текст программы статический и при многократном запуске программы это число будет неизменным. В результате будет получаться одна и та же последовательность случайных чисел. Во избежание этого недостатка, нужно чтобы стартовое значение в функции srand() постоянно изменялось.
Для того, чтобы в функции srand() получить разные начальные значения используется функция time() из библиотеки time.h.
Если функцию time() вызвать с параметром NULL, то эта функция возвратит количество миллисекунд, которые прошли с 1 января 1970 года. Значит, число миллисекунд будет зависеть от момента времени, в который пользователь запустил программу на выполнение. А этот момент каждый раз будет другим.
Если эти миллисекунды поместить в функцию srand() как показано ниже
srand(time(NULL));то каждый раз при запуске программы будет создана новая отправная точка в генерировании последовательности чисел функцией rand() . И, как следствие, будут получаться разные последовательности случайных чисел.
Пример. В примере демонстрируется генерирование последовательности из двух случайных чисел. Каждый раз при запуске программы будет получена новая последовательность.
4. Как сгенерировать случайное целое число в заданных пределах? Пример
В примере приведена функция GetRandomNumber() , которая генерирует случайное число в заданных пределах.
5. Заполнение двумерной матрицы случайными целыми числами в указанных пределах. Пример
Условие задачи. Дана двумерная матрица порядка n ( n столбцов, n строк) целых чисел. Найти наибольшее из значений элементов, которые размещены в закрашенной части матрицы. Значение элементов матрицы формируются случайным образом и находятся в пределах [-5; +5].
Текст программы следующий
6. Как сгенерировать случайное число с плавающей запятой в указанных пределах? Пример
В примере демонстрируется функция GetRandomNumberFloat() , которая генерирует случайное число с плавающей запятой в указанных пределах.
Связанные темы
Как задать диапазон в с
Диапазоны или range представляют неизменяемый последовательный набор чисел. Для создания диапазов применяетя range , которая имеет следующие формы:
- range(stop) : возвращает все целые числа от 0 до stop
- range(start, stop) : возвращает все целые числа в промежутке от start (включая) до stop (не включая).
- range(start, stop, step) : возвращает целые числа в промежутке от start (включая) до stop (не включая), которые увеличиваются на значение step
Примеры вызовов функции range:
range(5) # 0, 1, 2, 3, 4 range(1, 5) # 1, 2, 3, 4 range(2, 10, 2) # 2, 4, 6, 8 range(10, 2, -2) # 10 8 6 4
Диапазоны чаще всего применяются в циклах for . Например, выведем последовательно все числа от 0 до 4:
for i in range(5): print(i, end=" ") # Консольный вывод # 0, 1, 2, 3, 4
Другой пример выведем таблицу умножения:
for i in range(1, 10): for j in range(1, 10): print(i * j, end="\t") print("\n")
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Если нам необходим последовательный список чисел, то для его создания удобно использовать функцию range :
numbers = list(range(10)) print(numbers) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] numbers = list(range(2, 10)) print(numbers) # [2, 3, 4, 5, 6, 7, 8, 9] numbers = list(range(10, 2, -2)) print(numbers) # [10, 8, 6, 4]
Преимуществом диапазонов над стандартными списками и кортежами является то, что диапазон всегда будет занимать одно и то же небольшое количество памяти вне зависимости от того, какой набор чисел представляет этот диапазон. В действительности диапазон хранит только начальное, конечное значение и приращение.
