Вопрос № 37897: Здравствуйте, уважаемые эксперты! Пожалуйста помогите с решением задач:
Задача №1 Даны натуральные числа n, a1, a2,..., a[n]. Определить количество членов a[k] последовательности a1,..., a[n], имеющих четные порядковые номера и являющиеся нечетны...
Вопрос № 37.897
Здравствуйте, уважаемые эксперты! Пожалуйста помогите с решением задач:
Задача №1 Даны натуральные числа n, a1, a2,..., a[n]. Определить количество членов a[k] последовательности a1,..., a[n], имеющих четные порядковые номера и являющиеся нечетными числами.
Задача №2 Определить функцию f(n), вычисляемую n-е число Фибонначи и найти первое число Фибонначи больше m (m>1).
Задача №3 Задано натуральное число n. Напечатать его цифры в p-ичной системе счисления.
Отправлен: 19.03.2006, 05:29
Вопрос задал: AntiLamer (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 14)
Отвечает: Полховский Александр Владимирович
Здравствуйте, AntiLamer!
Что касается №1, то она довольно проста. Число будет чётным, если остаток от деления его на 2 будет равен 0. Ну и, соответственно, нечётным - если 1. За остаток отвечает оператор mod. Нужно лишь пройтись по всем числам по-порядку, посчитав для порядкового номера и для самого числа остаток от деления на 2. И сделать необходимый вывод.
Для вывода числа в p-ичной системе счисления нужно для начала заполнить строку (или массив) p знаками, которые мы будем использовать в качестве цифр (для систем с основанием большим, чем 10). Хотя можно воспользоваться и функцией chr. Ну это ладно. Число в p-ичной системе счисления представляется в виде суммы произведений каждого из разрядов на основание, возведённое в степень, равную номеру разряда, начиная с 0. Вот, например, как это представляется для числа 54876 в 10-ной системе счисления:
54876=6*10^0+7*10^1+8*10^2+4*10^3+5*10^4=
6+70+800+4000+50000.
Чтобы получить такую последовательность, нужно найти значение целочисленного деления числа на основание, возведённое в степень, равную номеру разряда, цифру которого мы определяем. Но этого мало. Если мы так сделаем, то для 2-го разряда всё того же числа (54876, то есть восьмёрка, так как нумерация с 0) получим:
№2=54876 div 10^2=54876 div 100=548.
А нас интересует только восьмёрка. А посему, надо ещё найти остаток от деления полученного числа на 10 (то есть основание системы счисления):
№2=548 mod 10.
Итого, конечная формула для i-го разряда числа такова:
№i=(n div p^i) mod p,
где n - заданное число,
p - основание системы счисления. Но для определения всех чисел надо знать сколько будет разрядов. Для этого при завершении очередного цикла (пусть это будет repeat-until) сделаем проверку, которая даст true, если целочисленное деление даст 0, то есть число, на которое мы делим больше данного нам n:
until n div p^i = 0;
В строку символов при подсчёте каждого разряда добавлять символ, соответствующий данной цифре (8 для8, 9 для 9, A для 10 и т.д.):
ch[i]:=chars[(n div p^i) mod p];
где ch - строка. которую и нужно вывести,
chars - строка (или массив символов). содержащий те самые символы для каждой цифры.
Не забудьте только развернуть результирующую строку, мы в неё задом наперёд записывали (не не, писали мы руками. конечно :) ).
Так-с. Числа Фибоннчи - последовательность чисел, каждое из которых (кроме первых двух) равно сумме двух предыдущих. Ищется легко и просто. Задаём два первых числа. А остальные просто тупо в лоб считаем как сумму двух предыдущих. Думаю, с этим уж Вы сами в состоянии справиться.
Учитесь, учитесь и ещё раз учитесь (не в смысле 3-х высших, а в смысле хорошо)
Что-то я с утра разговорчивый. Повезло Вам =)
--------- Спасём нашу хрупкую планету !
Отвечает: Евгения
Здравствуйте, AntiLamer!
1. ch:=0;
for k:=1 to n do
if (a[k] mod 2=1) {chislo nechetnoe} and (k mod 2=0) {index chetnyj} then
ch:=ch+1;
2. chisla fibonachi
a[1]:=1; a[2]:=1; {a[n]=a[n-2]+a[n-1]}
procedure fibonachi(k: integer;): integer;
var t,fib,one,two: integer;
begin
one:=1; two:=1;
t:=3;
if (k=1) or (k=2) then fib:=1 else
while t<=k do begin
fib:=one+two;
one:=two;
two:=fib;
t:=t+1;
end;
fibonachi:=fib;
end;
begin
fibonachi(k); {vychisljaet k-toe chislo fibonachi}
end;
{dlja togo, chtoby naiti chislo ne k-toe, a najti pervoe chislo fibonachi bol'shee m, to v procedure vyhod budet ne togda, kogda t dostignet k, a kogda fib budet bol'she zadannogo chisla, preobrazujte proceduru sami, v chislah fibonachi kazhdoe posledujush'ee chislo javljaetsja summoj predydush'ih dvuh, pervoe i vtoroe chislo edinica}
{esli est' oshibki sil'no ne beite, ne stoit pascalja... s potolka pisala...}
3. eta zadach svjazana vplotnuju s div i mod, esli znaete kak iz 10-oj sistemy perevodit' v drugie, privedu primer na dvoichnoj sisteme:
46 - chislo v 10-j sis-me
^ 46 mod 2=0; 46 div 2=23;
| 23 mod 2=1; 23 div 2=11;
| 11 mod 2=1; 11 div 2=5;
| 5 mod 2=1; 5 div 2=2;
| 2 mod 2=0;
| 2 div 2=1;
101110 - eto 46 v dvoichnoj - my shli s konca - s poslednego div i po vsem mod... takzhe dlja ljuboj sistemj schistlenjaj, tut zadacha pridumat' kak hranit' chislo, chtob ego potom vybesti s konca, mozhno hranit' v massive i zapominat' kolvo elementov, a potom vyvesti ih v obratnom porjadke...
izvinite, esli chto naputala gde, za vas vse uzh ne budu delat', no dumaju pomogla, ostal'naja rabota za vami - esli est' voprosy, to pishite...
Spasibo...
Ответ отправила: Евгения (статус: 2-ой класс)
Ответ отправлен: 19.03.2006, 06:48