Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 08.02.2015
Сообщений: 10
1

Генератор неповторяющихся семизначных чисел

04.10.2015, 16:00. Показов 3701. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем здравствуйте! Очень нужна Ваша помощь. При написании программы столкнулась с проблемой в рандоме. Нужно, чтобы на экран выводились семизначные неповторяющиеся числа. У меня они все начинаются с 10, а дальше все нормально. Необходимо, чтобы все они были разные.
Задание полностью: Сгенерировать 49 семизначных неповторяющихся чисел (элементов). Вывести их на экран.
Мой код на c++:
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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <iomanip>
using namespace std;
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    const int n = 49;
    const int t = 74;
    int mas1[n];//массив рандомных чисел
    int mas2[t];//массив хеш-таблицы
    for (int i = 0; i<t; ++i)
        mas2[i] = 0;
    srand(time(0));
    mas1[0] = rand() % 9000001 + 1000000;//ранд
    for (int i = 1; i <= n; ++i)
    {
        mas1[i] = rand() % 9000001 + 1000000;//ранд
        for (int j = 1; j <= i; ++j)
        metka:if (mas1[i] == mas1[i - j])//перебор массива на случай совпадений
        {
            mas1[i] = rand() % 9000001 + 1000000;
            goto metka;
        }
    }
    cout << "Исходный массив:\n" << '\n';
    for (int i = 1; i <= n; ++i)
        cout << i << " " << mas1[i] << '\t';//вывод массива
    _getch();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2015, 16:00
Ответы с готовыми решениями:

Генератор случайных неповторяющихся чисел
Народ помогите! Проблема следующая. Я создал массив и заполнил его числами с помощью rand от -20...

Массив случайных неповторяющихся чисел
Ребят работал всю ночь и сейчас голова не пашет! объясните в чем проблема private: System::Void...

Сгенерировать 54 пятизначных неповторяющихся чисел
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;conio.h&gt; using namespace...

Матрица из случайных неповторяющихся чисел
Здравствуйте! В C++ я новичок (что по-моему и так понятно, иначе этого вопроса бы не было :D)....

6
34 / 34 / 36
Регистрация: 22.05.2015
Сообщений: 146
04.10.2015, 22:06 2
ЭльвираР, Вы упустили приоритеты операций.
C++
1
rand() % 9000001 + 1000000;
Деление по модулю приоритетней, чем сложение.
Просто возьмите в скобки операцию сложения.
C++
1
rand() % (9000001 + 1000000);
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
04.10.2015, 22:51 3
Цитата Сообщение от awalio Посмотреть сообщение
C++
1
rand() % (9000001 + 1000000);
даст значения от 0 до 10000000
Цитата Сообщение от ЭльвираР Посмотреть сообщение
C++
1
rand() % 9000001 + 1000000;
от 1000000 до 10000000
для семизначных нужно
C++
1
rand() % 9000000 + 1000000;
Добавлено через 4 минуты
А то, что начинаются с 10, так это из-за того, что максимум rand() = 32767
2
34 / 34 / 36
Регистрация: 22.05.2015
Сообщений: 146
04.10.2015, 23:02 4
Вот такое решение нашел:

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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <iomanip>
 
using namespace std;
 
unsigned long long randll()
{
    unsigned long long most = rand(), least = rand();
    return (most << 32ULL) + least;
}
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    const int n = 49;
    const int t = 74;
    int mas1[n];//массив рандомных чисел
    int mas2[t];//массив хеш-таблицы
    for (int i = 0; i<t; ++i)
        mas2[i] = 0;
    srand(time(0));
    mas1[0] = randll() % 9000001 + 1000000;//ранд
    for (int i = 1; i <= n; ++i)
    {
        mas1[i] = randll() % 9000001 + 1000000;//ранд
        for (int j = 1; j <= i; ++j)
        metka:if (mas1[i] == mas1[i - j])//перебор массива на случай совпадений
        {
            mas1[i] = randll() % 9000001 + 1000000;
            goto metka;
        }
    }
    cout << "Исходный массив:\n" << '\n';
    for (int i = 1; i <= n; ++i)
        cout << i << " " << mas1[i] << '\t';//вывод массива
    _getch();
    return 0;
}
1
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
04.10.2015, 23:13 5
Лучший ответ Сообщение было отмечено ЭльвираР как решение

Решение

ЭльвираР,
и еще, чтобы не выходить за границы массива циклы для mas1 нужно объявлять:
C++
1
for (int i = 0; i < n; i++)
Добавлено через 9 минут
а рандомайзить семизначные можно так:
C++
1
mas1[i] = (double)rand()/(RAND_MAX+1)*(9999999-1000000)+1000000;
1
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
04.10.2015, 23:17 6
Цитата Сообщение от awalio Посмотреть сообщение
C++
1
2
3
4
5
metka:if (mas1[i] == mas1[i - j])//перебор массива на случай совпадений
{
    mas1[i] = randll() % 9000001 + 1000000;
    goto metka;
}
т.е. классический while не устраивает?
1
0 / 0 / 1
Регистрация: 08.02.2015
Сообщений: 10
06.10.2015, 15:46  [ТС] 7
Большое спасибо! Теперь правильно получается
0
06.10.2015, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2015, 15:46
Помогаю со студенческими работами здесь

компьютер генерирует число из 4 неповторяющихся чисел
Подскажите как с помощью random сгенерировать число из 4 неповторяющихся чисел

Генерация неповторяющихся чисел в квадратной матрице
//ïîëå #include &lt;graphics.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; ...

Дано два целочисленных массива, состоящих из неповторяющихся чисел.
Дано два целочисленных массива, состоящих из неповторяющихся чисел. Сформировать новый массив,...

Создать d неповторяющихся рандомных чисел - не могу найти ошибку
Программа должна создавать d не повторяющихся рандомных чисел, от 0 до d-1, которые сохранены в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru