2013-01-18 3 views
1

Можно создать дубликат:
How to generate a random number from within a range - Cсгенерировать случайное число от 1 до N-1

Как бы вы генерировать случайное число в диапазоне от 1 до N-1, где N представляет собой число, тем пользователь пробивает?

До сих пор, мой код:

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
    int number = 0; //number variable 
    printf("This program will ask you for a number, an integer, and will print out a random number from the range of your number 1, to N-1.");//output that explains the program's purpose and use to the user. 
    //gets the input 
    fgets(buffer, sizeof(buffer), stdin); 
    sscanf(buffer, "%d", &number); //gets the input and stores it into variable number 

    return (0); 

}

+0

Подсказка: искать функцию, возвращающую случайное число и использовать оператор модуля –

ответ

1

Попробуйте что-то вроде этого: -

unsigned int 
randomr(unsigned int min, unsigned int max) 
{ 
     double x= (double)rand()/RAND_MAX; 

     return (max - min +1)*x+ min; 
} 

Проверить эту ссылку: - http://c-faq.com/lib/randrange.html

0

Вы должны смотреть на rand. Немного математики, и у вас есть решение.

1

В зависимости от того, как «случайные» вы хотите, чтобы ваши номера были, вы можете использовать функцию rand() из стандартного libc. Эта функция будет генерировать числа от 0 до RAND_MAX. Затем вы можете получить результат в хорошем диапазоне, используя операцию modulo.

Обратите внимание, что этот генератор (а LCG) является ни подходит для криптографических приложений ни научных приложений.

Если вы хотите использовать более подходящие генераторы, посмотрите на генераторы, такие как Mersenne Twister (хотя и не криптозащита).

+1

'НЕ подходит для криптографических приложений или научных приложений' С точки зрения вопроса и контекста я не думаю, что мы должны беспокоиться об этом. ;) – Mike

+0

Конечно, но это на всякий случай кто-то использовал бы этот ответ для чего-то еще :-) –

Смежные вопросы