Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
neic777
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 138
#1

Рандомные числа без повтора - C (СИ)

11.04.2013, 18:30. Просмотров 4440. Ответов 28
Метки нет (Все метки)

Как сделать чтобы рандомные числа выводились без повторения ?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main(){
int n,i,k=0;
 
printf("Vvedite kol. rand. 4isel ");
scanf("%d", &n);
 
for(i=0; i<n; i++){
k = i + rand() % n;
printf("\n%d", k); }
 
 
getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2013, 18:30
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Рандомные числа без повтора (C (СИ)):

Не генерирует каждый раз рандомные числа - C (СИ)
Ребят , помогите пожалуйста , написал прогу , но есть две проблемы 1) для трех разных массивов функция рандом генерирует одинаковые числа...

При выводе на экране появляются непонятные рандомные числа - C (СИ)
На этапе ознакомления с массивами столкнулся с такой проблемой #include&lt;stdio.h&gt; int main(){ int m ; int a =...

Избавиться от повтора вариантов при рекурсии - C (Си)
#include &lt;stdio.h&gt; void find (int *s ,int n) { int max = (n-1)/3; for (int b = 1; b&lt;=max; b++) for (int a = 1;...

Определить частоту повтора каждого символа в строке - C (СИ)
Составить програму, которая считает частоту повтора каждого символа в строке

Найти все целые числа b, для которых а делится без остатка на b^2 и не делится без остатка на b^3 - C (СИ)
Пользователь вводит любое целое число а. Необходимо вывести все целые числа b , для которых а делится без остатка на b*b и не делится без...

Записать рандомные имена в структуру: Segmentation fault - C (СИ)
Нужно записать рандомные имена в структуру,но дает Segmentation fault.Что не так? struct Client { char name; char surname; ...

28
RHB
33 / 33 / 8
Регистрация: 27.01.2013
Сообщений: 200
11.04.2013, 19:07 #2
Генерация массива целых случайных чисел, которые не повторяются

Специально для тебя написано В самом верху страницы форума)
0
neic777
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 138
11.04.2013, 19:08  [ТС] #3
я видел, но там всё слишком усложнено, мне надо проще
0
RHB
33 / 33 / 8
Регистрация: 27.01.2013
Сообщений: 200
11.04.2013, 19:09 #4
neic777, тогда задание давай
0
neic777
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 138
11.04.2013, 19:19  [ТС] #5
написал же. генерация определенного количества(n) рандомных чисел, без повторения

тут думаю и без комментариев всё ясно:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
void main(){
int n,i,k=0;
srand(time(NULL));
printf("Vvedite kol. rand. 4isel ");
scanf("%d", &n); 
 
for(i=0; i<n; i++){
k = i + rand() % n; 
printf("\n%d", k); }
 
 
getch();
}
0
KwanzaBot
9 / 9 / 2
Регистрация: 05.04.2013
Сообщений: 61
11.04.2013, 19:30 #6
Непонятно, ведь есть же шанс что числа будут повторятся в вашем коде? Или я что то недогнал.
0
RHB
33 / 33 / 8
Регистрация: 27.01.2013
Сообщений: 200
11.04.2013, 19:31 #7
KwanzaBot, вот он и просит чтобы не было такого шанса)
0
Байт
Эксперт C
17712 / 11733 / 1870
Регистрация: 24.12.2010
Сообщений: 23,523
11.04.2013, 19:31 #8
Заполнить массив случайными неповторяющимися числами
0
neic777
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 138
11.04.2013, 19:32  [ТС] #9
Байт, а с обычной переменно такое не прокатит ?
0
Platina
4 / 4 / 0
Регистрация: 09.04.2013
Сообщений: 38
11.04.2013, 19:33 #10
//Генерация случайных чисел в интервале [30; 50]

#include <iostream.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int m;

srand(time(NULL)); //нужно для того, чтобы генерировать не одно и тоже число

//цикл для 10 чисел
for (int i = 0; i < 10; i++)
{
m = 30 + rand()%21;
cout << m << endl;
}
return 0;
}
0
KwanzaBot
9 / 9 / 2
Регистрация: 05.04.2013
Сообщений: 61
11.04.2013, 19:34 #11
Как вариант просто проверять совпадения и если что "дозаполнять"
0
RHB
33 / 33 / 8
Регистрация: 27.01.2013
Сообщений: 200
11.04.2013, 19:34 #12
neic777,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int n,i,k,z;
    srand(time(NULL));
    printf("Vvedite kol. rand. 4isel ");
    scanf("%d", &n); 
    k=rand() % n + 1;
    printf("%d ", k);
    for(i=1; i<n; i++)
    {
        z=k+ (rand() % n + 1);
        printf("%d ", z);
        k=z;
    }
    getche();
    return 0;
}
самое простое что я изобрел)
1
Байт
Эксперт C
17712 / 11733 / 1870
Регистрация: 24.12.2010
Сообщений: 23,523
11.04.2013, 19:38 #13
Цитата Сообщение от neic777 Посмотреть сообщение
с обычной переменно
Что значит с обычной переменной? В любом случае надо запоминать, какие числа уже выпали. Для этого создается массив-шкала по байтику на каждое число из диапазона. в нем отмечаются единичками впавшие числа. Следующий рандом берется уже r=rand()%(n-1) и находится просмотром этого массива байтиков r-ый не выпавший (0) И так далее...
0
neic777
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 138
11.04.2013, 19:46  [ТС] #14
RHB, не работает + не вижу в коде, где проверка

Добавлено через 7 минут

Байт, ок, тогда так можно сделать ?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int a[10],i,k,z;
    srand(time(NULL));
 
    for(i=0; i<=10; i++){
     k = 0 + rand() %30;
      if(a[k]==a[k+1]) break;
     printf("%d ", a[k]); }
 
    getch();
}
0
RHB
33 / 33 / 8
Регистрация: 27.01.2013
Сообщений: 200
11.04.2013, 19:47 #15
neic777, вот этот код бери:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int n,i,k,z;
    srand(time(NULL));
    printf("Vvedite kol. rand. 4isel \n");
    scanf("%d", &n); 
    k=rand() % n + 1;
    printf("%d ", k);
    for(i=1; i<n; i++)
    {
        z=k+ (rand() % n +1 );
        printf("%d ", z);
        k=z;
    }
    getche();
    return 0;
}
он работает!
0
Миниатюры
Рандомные числа без повтора  
11.04.2013, 19:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 19:47
Привет! Вот еще темы с ответами:

Функция rand() генерирует не совсем рандомные значения - C (СИ)
Проблема заключается в следующем: Когда цикл в мэйне обращается к ф-ции &quot;func()&quot;, то при первом обращении всё генерируется, но при...

Вывести по убыванию числа, без цикла) - C (СИ)
Задачка в универе.. Задано числа a,b,c,d. Вывести их в порядке уменьшения. дело в том что через масив и цикл это делается очень...

Найти простые числа без проверки делителей - C (СИ)
Помогите, пожалуйста, немного улучшить код. Вся проблема в том что i считает кол-во делителей. Оно вроде там и не надо совсем, но без него...

Выделить из строки числа и разместить их в массив без дублирования - C (СИ)
Добрый день, нужна помощь с заданием : Во введенной пользователем строке могут содержаться слова и целые числа, разделенные пробелами....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru