На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 4
ссылка на сообщение  Отправлено: 19.01.21 22:26. Заголовок: ege16 №68


68) Алгоритм вычисления функций F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = n + 1 при n < 3,
F(n) = F(n – 2) + n – 2, когда n ≥ 3 и четно,
F(n) = F(n + 2) + n + 2, когда n ≥ 3 и нечетно.
Сколько существует чисел n, для которых значение F(n) будет пятизначным?

мой код
var
i,j,k,kol,key:integer;

function f(n: integer): integer;
begin
var
i,j:integer;
if n < 3 then
f:= n + 1
else if (n >= 3) and ((n mod 2) = 0) then
f:= f(n - 2) + n - 2
else
f:= f(n+2) + n + 2;
end;

begin
kol:=0;
for i:=1 to 10 do
begin
k:= f(i);
key:=0;
while k <> 0 do
begin
k:= (k div 10);
key +=1;
end;
if (key = 5) then
kol += 1;
end;
Writeln(kol);
end.
ошибка при исполнении: Ошибка времени выполнения: StackOverflowException: Программа завершена из-за переполнения программного стека
Пожалуйста, подскажите почему.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]







Сообщение: 37
ссылка на сообщение  Отправлено: 20.01.21 11:42. Заголовок: Ошибка в описании функции


function f(n: integer): integer; 
begin
var
i, j: integer;
if n < 3 then
f := n + 1
else
if ((n mod 2) = 0) then
f := f(n - 2) + n - 2
else
f := f(n + 2) + n + 2;
end;


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 41
ссылка на сообщение  Отправлено: 20.01.21 12:10. Заголовок: второе - опять функция :)


F(n) = F(n + 2) + n + 2, когда n ≥ 3 и нечетно, всегда растет... Поэтому и переполнение. Думаю, что искать пятизначные числа нужно только для четных n, поэтому убираю эту часть функции, в for 1000 или больше - ответ 216.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 5
ссылка на сообщение  Отправлено: 20.01.21 20:27. Заголовок: Спасибо!..


Спасибо!

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
ссылка на сообщение  Отправлено: 27.02.21 20:54. Заголовок: Алгоритм вычисления ..


Алгоритм вычисления функции F(n) задан следующими соотношениями:
F(n) = n при n <= 3;
F(n) = F(n – 1) + 2 · F(n / 2) при чётных n > 3;
F(n) = F(n – 1) + F(n – 5) при нечётных n > 3;
Определите количество натуральных значений n, при которых F(n)
меньше, чем 10^8.
Написала массу вариантов, но ничего не получается. Последний вариант
 var n:integer; 
function F(n:integer):integer;
begin
if n<3 then F:=n
else
if ((n mod 2) = 0) then
F:=F(n-1)+2*F(n div 2) else
F:=F(n-1)+F(n-3);
end;
begin
writeln (n);
end.

Помогите пожалуйста.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2514
ссылка на сообщение  Отправлено: 27.02.21 22:04. Заголовок: Татьяна 86 пишет: ни..


Татьяна 86 пишет:
 цитата:
ничего не получается

Сформулируйте, пожалуйста, что именно не получается, и в чем вам нужна помощь.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 1
ссылка на сообщение  Отправлено: 28.02.21 18:32. Заголовок: Решая данную задачу ..


Решая данную задачу на паскале, ответ дает 0, чего не может быть. Если решаю в экселе (=ЕСЛИ(ОСТАТ(A31;2)=0;B30+2*СМЕЩ(B31;-2;0);B30+B28), то 31, а в ответе 64.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Сообщение: 2521
ссылка на сообщение  Отправлено: 28.02.21 18:49. Заголовок: Татьяна 86 пишет: на..


Татьяна 86 пишет:
 цитата:
на паскале, ответ дает 0

Вы выводите на экран глобальную переменную, которая не изменялась во время работы программы. По умолчанию она равна 0.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить





Не зарегистрирован
ссылка на сообщение  Отправлено: 31.01.22 16:31. Заголовок: Альтернативное решение этого задания


Учитывая, что значение функции для четных n, больших трех вычислить невозможно, то можно обойтись и без рекурсии и без массива.
Используя всего 2 переменные: Fn_2 и Fn - предпредыдущий элемент и текущий.
 
var
n, kNum, Fn, Fn_2 :integer;

begin
kNum := 0;
//Определение функции F(n) = F(n + 2) + n + 2, когда n ≥ 3 и нечетно
//не используем, т.к. оно ссылается на СЛЕДУЮЩИЕ значения

(Fn_2, Fn) := (3, 0); //f[2] = 3
n := 2;
Repeat
n += 2;
Fn := Fn_2 + n - 2;
if (Fn >= 10000) then
begin
kNum += 1;
//Writeln(kNum,' ',Fn); - тестовый вывод
end;
Fn_2 := Fn;
Until Fn >= 100000;

writeln(kNum - 1);
end.


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1055
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет