Дистанционная подготовка: Задача 3061. Двоичный логарифм корректое условие?
Задача 3061. Двоичный логарифм корректое условие?
от Максим Шишкин - Суббота 17 Май 2014, 18:26
3061. Двоичный логарифм
  Придумал аж 2 реализации этой задачи. Простой программный способ

double j=N;
int s=0;

while(j>1){
j = j/2;
s++;
}

Второй математический.
double j=N;
int s=0;
j = Math.log10(N)/Math.log10(2) ;
if(j%10>0){s = (int)j+1;}else{s = (int)j;}

Проверял работает нормально. Но в обоих случая большинство тестов неправильно. Задача вроде бы легкая с условием, что n - натуральное. Может с условием что-то не то?Большинство посылок неправильное.
Re: Задача 3061. Двоичный логарифм корректое условие?
от Григорий Резников - Суббота 17 Май 2014, 21:13
  С условием явно что-то не то, потому что решение, набирающее 100 баллов выдает на претесте не 3,а 2. Методом проб и ошибок я понял, что правильное решение следующее: найдем максимальное q (q<=n) где q является числом вида 2^p, где p-целое.
Re: Задача 3061. Двоичный логарифм корректое условие?
от Peter Cherepanov - Суббота 17 Май 2014, 21:43
  Похоже, изменились тесты.
Я сдал эту задачу давно, и мое решение дает такие же ответы, как ваше.
Сейчас почти никто не может сдать эту задачу, так как тесты ищут наибольшее К, такое что 2**K <= N
Re: Задача 3061. Двоичный логарифм корректое условие?
от Максим Шишкин - Воскресенье 18 Май 2014, 09:56
  И пример ввода-вывода тоже.
Переделал под условие  2**K <= N и получил ОК
Re: Задача 3061. Двоичный логарифм корректое условие?
от Максим Шишкин - Воскресенье 18 Май 2014, 09:57
  Мудреный автоформат. Лишнее сообщение написал.
Надо ставить текстовый