Задание №1701/21

Задание

Укажите количество значений входной переменной k, при которых программа напечатает тот же ответ, что и при k = 12.

  • Копировать
    function f(n : integer) : integer;
    begin
      if n > 0 then
        f := 2 * f(n - 1)
      else
        f := 1
    end;
    
    var
      k, i : integer;
    begin
      readln(k);
      i := 1;
      while f(i) < k * k do begin
        i := i + 1;
    	k := k + 1
      end;
      writeln(i)
    end.
    
  • Копировать
    #include <stdio.h>
    
    int f(int n) {
      if (n > 0)
        return 2 * f(n - 1);
      else
        return 1;
    }
    
    void main() {
      int k, i = 1;
      scanf("%d", &k);
      while (f(i) < k * k) {
        i++;
        k++;
      }
      printf("%d", i);
    }
    
  • Копировать
    DIM K, I AS INTEGER
    INPUT K
    I = 1
    WHILE F(I) < K * K
      I = I + 1
      K = K + 1
    WEND
    PRINT I
    
    FUNCTION F(N)
      IF N > 0 THEN
        F = 2 * F(N - 1)
      ELSE
        F = 1
      END IF
    END FUNCTION
    
  • Копировать
    def f(n) :
      if n > 0 :
        return 2 * f(n - 1)
      else :
        return 1
    
    k = int(input())
    i = 1
    while f(i) < k * k :
      i += 1
      k += 1
    print(i)
    

Решение

Не сложно понять, что рекурсивная функция f(n) возводит число 2 в неотрицательную целую степень n, то есть \(f(n) = 2^n\).

После трассировки при k = 12 определим, что программой выводится значение i = 9. Далее, из условия окончания цикла, получим: \[\left\{ \begin{array}{c} f(8)<(k+7)^{2},\\ f(9)\geq(k+8)^{2},\\ k\in\mathbb{Z} \end{array}\right.\Leftrightarrow\left\{ \begin{array}{c} 256<(k+7)^{2},\\ 512\geq(k+8)^{2},\\ k\in\mathbb{Z} \end{array}\right.\] Решение системы в целых числах даёт значения k=-30,...,-24 и k=10,...,14, то есть всего 12 различных значений k.

Подробнее...

Ответ

12

Подробнее...
Добавить комментарий
Комментарии (0)