Заполнение массива случайными неповторяющимися числами в заданном диапазоне - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужно заполнить массив целых чисел в любом диапазоне, не допуская генерации повторяющихся чисел.. Правда ничего не выдаёт и как я понимаю, ошибка там, где проверка на повторения..
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <locale.h>
  5. int main()
  6. {
  7. setlocale (LC_ALL,"russian");
  8. const int n=100;
  9. int a[n],m,st,fin,r;
  10. printf("Введите размер массива \n");
  11. scanf_s("%d",&m);
  12. printf("Введите начало диапазона \n");
  13. scanf_s("%d",&st);
  14. printf("Введите конец диапазона \n ");
  15. scanf_s("%d",&fin);
  16. for (int i=0;i<m;i++)
  17. {
  18. r=st+rand()%(fin-st);
  19. a[i]=r;
  20. for (int l=0;l<m;l++)
  21. {
  22. while (a[i]==a[l])
  23. {
  24. r=st+rand()%(fin-st);
  25. a[l]=r;
  26. }
  27. }
  28. }
  29. for (int i=0;i<m;i++)
  30. printf("%d ",a[i]);
  31. getch();
  32. return 0;
  33. }

Решение задачи: «Заполнение массива случайными неповторяющимися числами в заданном диапазоне»

textual
Листинг программы
  1.         for (int l=0;l<m;l++)
  2.         {
  3.              if (i==l) break; //прерывание цикла  
  4.              while (a[i]==a[l])
  5.             {
  6.                 r=st+rand()%(fin-st);
  7.                 a[l]=r;
  8.             }
  9.         }

Объяснение кода листинга программы

В данном коде происходит следующее:

  1. Задаются начальные значения переменных:
    • m - количество элементов, которые нужно заполнить в массиве
    • i - индекс текущего элемента, который заполняется
    • l - индекс проверяемого элемента
    • st - начало диапазона случайных чисел
    • fin - конец диапазона случайных чисел
    • a - массив, который заполняется
  2. В цикле for перебираются все элементы массива a. На каждой итерации выполняется следующее:
    • Если i равно l, то цикл прерывается. Это сделано для того, чтобы не выполнять лишние итерации после того, как все элементы массива заполнены.
    • В цикле while проверяется, является ли текущий элемент a[i] равным любому другому элементу массива a[l]. Если это так, то цикл продолжает выполняться.
    • Если цикл while завершен, то генерируется случайное число в диапазоне от st до fin и присваивается элементу a[l].
  3. После завершения цикла for все элементы массива a будут заполнены случайными неповторяющимися числами в заданном диапазоне.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы