Как напечатать числа 1-10 в случайном порядке без повторов в C - PullRequest
0 голосов
/ 26 апреля 2020

Мне нужно иметь возможность печатать числа 1-10 в случайном порядке в C. Спасибо.

Вот моя попытка

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

int main ()
{
    int arr[100];
    int size=8;
    srand(time(NULL));
    for (int i=0; i<=size; ++i){
        arr[i]=rand()%size+1;
            for (int j=0; j<=i; ++j){
                if (arr[i]==arr[j]){
                    arr[i]=rand()%size+1;
                }
            }
        }
    for (int count=0; count<size; ++count){
        printf("%d\n",arr[count]);
    }
    return 0;
}

1 Ответ

0 голосов
/ 26 апреля 2020

Обычно этот сайт работает так, что вы показываете, что вы сделали, вы говорите, что не работает, и мы go оттуда.

Видя ваш вопрос, есть две возможности: либо вы хотите, чтобы мы написать свой код (что я не буду делать) или у вас нет ни малейшего понятия о том, как начать.

Я буду go для второго подхода, и дать вам отправную точку на как ваш вопрос может быть обработан:

Сначала вы создаете список, содержащий все числа от 1 до 10, и отслеживаете количество элементов в этом списке (назовите его lSize). Затем вы генерируете случайное число от 0 до lSize (что можно сделать, используя random()*lSize, округленное в меньшую сторону). Это дает вам индекс числа, которое вы можете взять. Вы берете число, присутствующее в этом индексе, в списке и удаляете его из списка.

Позвольте мне показать вам, как это работает, в примере:

list : (1,2,3,4,5,6,7,8,9,10)
lSize : 10
final_list : <empty>

Сначала итерация: представьте, что random()*lSize, округленное в меньшую сторону, равно 3.

list[3] = 4 (generally we start counting at 0)
So you add 4 to your final list (currently this is `final_list=(4)`)
You then remove that index from the list, and you get following values:

list : (1,2,3,5,6,7,8,9,10)
lSize : 9
final_list : (4)

Вторая итерация: представьте, что random()*lSize, округленное в меньшую сторону, равно 8.

list[8] = 10
Remove it and add it to the final_list:

list : (1,2,3,5,6,7,8,9)
lSize : 8
final_list : (4,10)

Вы продолжаете с там до тех пор, пока ваш список не станет пустым или lSize не равен нулю.

Осторожно: list предпочтительно является связанным списком, а не массивом, так как удаление элемента где-то посередине должно вызвать другой элементы должны быть сдвинуты. В массиве это сложно; в связанном списке это тривиально.

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...