Вывести первые n членов треугольной последовательности - Turbo Pascal
Формулировка задачи:
Дана монотонная последовательность, в которой каждое натуральное число k встречается ровно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...
По данному натуральному n выведите первые n членов этой последовательности. Попробуйте обойтись только одним циклом for.
Входные данные
Вводится натурально число n.
Выходные данные
Выведите ответ на задачу.
Примеры
входные данные
2
выходные данные
1 2
входные данные
5
выходные данные
1 2 2 3 3
Решение задачи: «Вывести первые n членов треугольной последовательности»
textual
Листинг программы
- //рекурсивная процедура вывода чисел ряда
- //k-число n-количество выводимых чисел
- procedure vyvod(k,n:integer);
- begin
- if n>0 then
- begin
- write(k,' ');
- vyvod(k,n-1);
- end;
- end;
- var n,k,q,i:integer;
- a:real;
- begin
- write('n=');
- readln(n);
- //найдем ближайшее треугольное число сверху
- a:=(-1+sqrt(1+8*n))/2;//из формулы Tn=n*(n+1)/2
- if frac(a)=0 then k:=trunc(a)
- else k:=trunc(a)+1;
- q:=0;
- for i:=1 to k-1 do
- begin
- vyvod(i,i);
- q:=q+i;
- end;
- vyvod(k,n-q);
- end.
Объяснение кода листинга программы
- В начале кода объявляются переменные n, k, q и i, а также переменная a типа real.
- Затем происходит чтение значения переменной n с помощью функции readln.
- Находится ближайшее треугольное число сверху с помощью формулы Tn=n*(n+1)/2. Если дробная часть этого числа равна нулю, то k присваивается целая часть числа, иначе k присваивается целая часть плюс единица.
- Переменная q инициализируется значением 0.
- Затем происходит цикл for, который выполняется от 1 до k-1. Внутри цикла вызывается рекурсивная процедура vyvod, которая выводит текущее значение i и все предыдущие значения i. Значение i увеличивается на 1 на каждой итерации цикла.
- После завершения цикла for вызывается последняя итерация vyvod с аргументами k и n-q.
- Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д