Заполнение массива случайными неповторяющимися числами в заданном диапазоне - 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;
}
}
Объяснение кода листинга программы
В данном коде происходит следующее:
- Задаются начальные значения переменных:
m- количество элементов, которые нужно заполнить в массивеi- индекс текущего элемента, который заполняетсяl- индекс проверяемого элементаst- начало диапазона случайных чиселfin- конец диапазона случайных чиселa- массив, который заполняется
- В цикле
forперебираются все элементы массиваa. На каждой итерации выполняется следующее:- Если
iравноl, то цикл прерывается. Это сделано для того, чтобы не выполнять лишние итерации после того, как все элементы массива заполнены. - В цикле
whileпроверяется, является ли текущий элементa[i]равным любому другому элементу массиваa[l]. Если это так, то цикл продолжает выполняться. - Если цикл
whileзавершен, то генерируется случайное число в диапазоне отstдоfinи присваивается элементуa[l].
- Если
- После завершения цикла
forвсе элементы массиваaбудут заполнены случайными неповторяющимися числами в заданном диапазоне.