Условие задачи : В массиве из 30 элементов числа образуют неубывающую последовательность. Найти количество различных чисел в массиве (Язык Pascal)
Сложность : средняя .
Решение задачи :
Для начала продумаем наше решение. Случайным образом заполним массив, дальше постарайтесь понять что мы будем делать.
У нас будет цикл в цикл, т.е. мы возьмем первое число с помощью первого цикла и затем с помощью второго цикла будем сравнивать его в каждым числом этого массива, у нас будет переменная которая будет увеличиваться на 1 каждый раз как мы найдем одинаковой число, если эта переменная останется равна нулю, это будет означать что такое число одно в это массиве.
Сейчас всё разберем.
Для того чтобы найти количество различных чисел в массиве нам понадобятся следующие переменные :
- Переменные i и j — для циклов
- Переменная count — для количества различных чисел
- Переменная k — переменная которая будет увеличиваться на 1 каждый раз как мы найдем одинаковой число
- Переменная mass — для массива
Начнем мы с каркаса нашей программы :
uses crt; type massiv = array[1..100] of integer; var mass : massiv; i , j , count , k : integer; begin clrscr; randomize; end.
Тут мы создали свой тип данных , зачем читайте (тут), объявили все переменные , и включили генератор случайных чисел, подробнее (тут)
Теперь заполним массив случайными числами :
for i:=1 to 30 do begin mass[i] := random(20); write(mass[i], ' | '); end;
Заполнили и вывели все числа массива. А вот дальше самое …..
for i:=1 to 30 do begin for j:=1 to 30 do begin if (mass[i] = mass[j]) and (i <> j) then k := k + 1; end; if k = 0 then begin write(mass[i], ' | '); count := count + 1; end; k := 0; end;
Ну вот ваще нечего непонятно. Давайте попробуем разобраться, вот допустим у нас есть маленький массив из трех чисел:
3 2 2
Смотрим на 1-й цикл, мы берем 1-е число, в нашем случае 3 и пускаем второй в нем условие если элементы равны и их индексы не совпадают(это сделано чтобы не сравнивать одинаковые условия) , то увеличиваем k на 1, это будет означать что такое число есть в массиве.
К нашему примеру , у нас идет 3 и 3 условие не выполнятся, дальше 3 и 2 условие не выполнятся, дальше опять 3 и 2, тоже не выполнятся, в конечном итоге у нас переменная k осталась равна 0, это будет означать, что число 3 единственное на весь массив.
Если сравнивать двойки, то k у нас увеличиться, и это будет означать что в массиве есть еще одна или больше.
Ну вот такой принцип. Если вы не поняли то, напишите на бумажке себе маленький массив, и подставьте в этот цикл.
Всё решение задачи Pascal :
uses crt; type massiv = array[1..100] of integer; // создали тип данных для массива var mass : massiv; // объявили i , j , count , k : integer; // переменные begin clrscr; // очистили экран randomize; // включили генератор случайных чисел for i:=1 to 30 do // пускайем цикл begin mass[i] := random(20); // заполняем массив write(mass[i], ' | '); // выводим end; writeln; writeln('Элементы которые не повторяются'); for i:=1 to 30 do // пускаем цикл begin for j:=1 to 30 do // второй цикл begin if (mass[i] = mass[j]) and (i <> j) then // если элементы равны и индексы не равны k := k + 1; // k увеличиваем на 1 end; if k = 0 then // если к = 0 begin write(mass[i], ' | '); // выводим число которое не повторяется count := count + 1; // увеличиваем кол-во таких чисел на 1 end; k := 0; // обнуляем к end; writeln; writeln('Кол-во не повторяющихся элементов : ', count); // выводим результат readln; // чтобы программа не закрывалась end.