Показать сообщение отдельно
Старый 29.10.2016, 11:27   #1 (permalink)
iks2
Member
 
Регистрация: 22.10.2016
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Очень интересная задача

Любое натуральное число N может быть сведено к 1 за конечное число шагов k по следующему алгоритму. Если число N делится на 3, то его надо разделить на 3. В противном случае к N надо прибавить 1.
пример: с числом 1 ничего делать не надо - оно уже равно 1. число 2 приводится к 1 так: 2 => 3 => 1.(за два шага) число 9 приводится к 1 так: 9 => 3 => 1(тоже за два шага)
Задача.
Написать программу, где задается число шагов k и находится НАИМЕНЬШЕЕ число, соответствующее этому шагу и приводящее к 1.
Вывести на экран 20 первых таких чисел.

Вопрос
Что изменится в программе, если в алгоритм будет внесено изменение: "....... В противном случае надо от N вычесть 1"?

Код:
DECLARE FUNCTION f& (k&)
CLS
DEFLNG A-Z

FOR i = 0 TO 20
   PRINT i; f(i)
NEXT
END

FUNCTION f& (k AS LONG)
SELECT CASE k
   CASE 0: f = 1
   CASE 1: f = 3
   CASE 2: f = 2
   CASE 3: f = 6
   CASE 4: f = 5
   CASE ELSE
      f = 3 * f(k - 3) - 2
END SELECT
END FUNCTION
iks2 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070