Как проверить, имеет ли массив число дважды или более?
Привет.У меня проблема с кодом на языке Си.
Я хочу проверить, содержит ли массив число дважды или более...
Например, у меня есть массив емкостью 20.
С помощью цикла for я даю случайные числа(от 1 до 20) и сохраняю их в этом массиве.Но каждый раз,когда программа выдает случайное число, я проверяю, содержится ли это число в массиве (с помощью do-while).
Но каждый раз я получаю номер дважды или больше...
Остальная часть кода не имеет значения.
Я хочу помочь только с функцией check_array (.....)...
Спасибо!!!
Что я уже пробовал:
Code: int check_array(int *pinakas , int N) { int checked = 1; for(int i = 0; i < N; i++) { for(int j = i + 1; j < N; j++) { if(*(pinakas + j) == (*(pinakas + i)) ) { checked = 0; } } } checked = 1; void init_array(int *array , int N , int a , int b) { srand(time(NULL)); for(int i = 0; i < N; i++) { do { *(array + i) = a + rand() % (b - a + 1); } while(check_array(array , N) == 0); } }
Joe Woodbury
Учитывая ваши требования, вы можете рассмотреть возможность использования перетасовки Фишера-Йейтса наизнанку. (https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_%22inside-out%22_algorithm)
Shao Voon Wong
Я не вижу никакого отношения вашего поста к вопросу ОП, но я хочу поблагодарить вас за ссылку. Просто сегодня узнал кое-что полезное. Перетасовка-это то, что я делаю довольно часто в своих хобби-проектах. До сегодняшнего дня в основном занимался наивной перетасовкой. Еще раз спасибо!
Joe Woodbury
Это решает проблему, которую он представил; он хочет 20 уникальных случайных чисел в массиве в диапазоне от 1 до 20.
(Кстати, я добрался до этой ссылки после того, как прочитал о перетасовке, которую я делал. Вот один из них: https://www.i-programmer.info/programming/theory/2744-how-not-to-shuffle-the-kunth-fisher-yates-algorithm.html)