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

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

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

Нужно заполнить массив целых чисел в любом диапазоне, не допуская генерации повторяющихся чисел.. Правда ничего не выдаёт и как я понимаю, ошибка там, где проверка на повторения..
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
 
int main()
{
    setlocale (LC_ALL,"russian");
    const int n=100;
    int a[n],m,st,fin,r;
    printf("Введите размер массива \n");
    scanf_s("%d",&m);
    printf("Введите начало диапазона \n");
    scanf_s("%d",&st);
    printf("Введите конец диапазона \n ");
    scanf_s("%d",&fin);
    
    for (int i=0;i<m;i++)
    {
        r=st+rand()%(fin-st);
        a[i]=r;
        for (int l=0;l<m;l++)
        {
            while (a[i]==a[l])
            {
                r=st+rand()%(fin-st);
                a[l]=r;
            }
        }
    }
 
    for (int i=0;i<m;i++)
    printf("%d ",a[i]);
    getch();
    return 0;
}

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

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

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

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

  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
Похожие ответы