Автор | Сообщение |
|
Отправлено: 06.03.23 15:57. Заголовок: Неверный ответ в задаче 5901 (Е. Джобс)
Здравствуйте. Решай задачи 5 на сайте Полякова К. В задача 5901 не получается указанного правильным ответа - 227. 227 в двоичной СС - 1110 0011 (по условию слева дописаны три младших разряда, т.е. мы должны были бы увидеть число в котором три первый цифры и три последние одинаковы, а перед тремя первыми стоит единица, иначе незначащие нули бы ушли и единицы слились воедино) Если для числа 11100011 убрать три разряда слева получим 00011, уберем незначащие нули и получим 011 (оставила один ноль, чтобы было три разряда), если вновь проделать 3 шаг, то запись должна иметь вид 110011, что снова противоречит ответу) Мой вариант ответа 247 - в двоичной 1111 0111 - убрав три левых разряда - 10111 - переведем в 10-ю СС - 23 - начальное число 25
|
|
|
Ответов - 8
[только новые]
|
|
|
Отправлено: 07.03.23 05:25. Заголовок: Что мешает добавить ..
Что мешает добавить незначащий ноль при выполнении указанной в задании операции?
|
|
|
|
Отправлено: 08.03.23 20:41. Заголовок: Поменяется конечное ..
Поменяется конечное число, чем больше незначащих нулей будем оставлять тем больше оно станет. Вообще в задаче возможен такой исход? Т.е. 11100111 - такой код тоже вполне может получиться? Но тогда я все равно не понимаю как можно прокрутить алгоритм (вручную) наоборот исходя из двоичного кода числа 227 - 1110 0011, ведь три младших разряда 011 (а значит справа мы должны были бы увидеть их), может я что-то не так вообще в сути задачи поняла
|
|
|
|
Отправлено: 15.03.23 14:07. Заголовок: Возможно, Вам это поможет
"Прикол" в этом задании в том, что минимальный ответ получается не для минимального N. Результаты работы алгоритма "скачут". Вот начало списка результатов: 247 255 227 357 292 422 487 235 300 430 300 430 495 243 308 438 373 503 316 ... Среди них, как видите, есть и 247 и 227. Я решал эту задачу в PascalABC.Net. Вот мое решение: uses School; function automat(n: integer): integer; var n2: string; begin n := n - Bin(n).CountOf('0'); n2 := Bin(n); n2 := RightStr(n2, 3) + n2; Result := Dec(n2, 2); end; begin (1..10000).Select(n -> automat(n)) .Where(R -> R > 224) .Min .Print; end.
|
|
|
|
Отправлено: 24.03.23 12:37. Заголовок: GasDM21 пишет: "..
GasDM21 пишет: цитата: | Результаты работы алгоритма "скачут". Вот начало списка результатов: 247 255 227 357 292 422 487 235 300 430 300 430 495 243 308 438 373 503 316 ... Среди них, как видите, есть и 247 и 227. |
| Когда результаты скачут, это может означать только одно - алгоритм кривой! Вот пример алгоритма, где результат не скачет, а выдает единственно правильный ответ: 227 Min = 100000 for i in range(1, 225): n = i - bin(i)[2:].count('0') n2 = bin(n)[2:] if len(n2) >= 3: n2 = n2[-3:] + n2 if int(n2,2) > 224: if int(n2,2) < Min: Min = int(n2,2) print(Min)
|
|
|
|
Отправлено: 24.03.23 13:28. Заголовок: И в чем же "крив..
И в чем же "кривизна"? Последовательно перебираются числа N, по ним строится R, и они "скачут" то вверх, то вниз.
|
|
|
|
Отправлено: 24.03.23 17:01. Заголовок: GasDM21 пишет: И в ..
GasDM21 пишет: цитата: | И в чем же "кривизна"? Последовательно перебираются числа N, по ним строится R, и они "скачут" то вверх, то вниз. |
| Вопрос, конечно, интересный, даже и не знаю как ответить. Начну пожалуй с крылатого выражения Элементарно, GasDM21! Алгоритм дающий однозначный ответ - правильный или "прямой", отсюда следует, что алгоритм не дающий однозначного ответа - неправильный или "кривой" Не нравиться слово «кривой» назовите его "скачущим то вверх, то вниз", т.е. - неуправляемым, а стало быть плохим! А про плохое зеркало как говорят - кривое! Не нравится "кривой", поищите в интернете синонимы для слова "кривой" и выберите любой, я не против Толкование смысла слова кривой Устар. Несправедливый, неправильный, ложный. Вы все правы, один я крив. А. Н. Толстой, Иван Грозный. Порядки-то кривые были при царе. Шолохов, Тихий Дон. синонимы к слову кривой Ничего личного, но предложенный вами алгоритм дает значения, которые с ваших же слов "скачут" то вверх, то вниз, а скачут кто, если перечислять в порядке убывания: Лошади, ..., блохи. Так что определение "кривой", самое толерантное ` Если я ошибаюсь, поправьте!
|
|
|
|
Отправлено: 24.03.23 18:05. Заголовок: И в чем же "крив..
В дополнение к выше сказанному и с развернутым примером ибо, ... вспомнил еще одно выражение "критикуя, предлагай": GasDM21 пишет: цитата: | Результаты работы алгоритма "скачут". Вот начало списка результатов: 247 255 227 357 292 422 487 235 300 430 300 430 495 243 308 438 373 503 316 ... |
|
` стало быть это неправильный или "плохой" алгоритм А вот другой алгоритм, я бы сказал - "Обратный", предложенному выше! Он, как и ваш, последовательно перебирает числа N, и по ним строит числа R, но, в отличии от вашего, выдает единственный и правильный ответ Min = set() for N in range(224,1,-1): n = N - bin(N)[2:].count('0') n2 = bin(n)[2:] if len(n2) >= 3: R = int(n2[-3:] + n2,2) if R > 224: Min.add(R) print('Ответ:',min(Min)) Ответил ли я на ваш вопрос и понятен ли мой ответ, уважаемый GasDM21?
|
|
|
|
Отправлено: 01.04.23 05:38. Заголовок: s11kai пишет: Ответ..
s11kai пишет: цитата: | Ответил ли я на ваш вопрос и понятен ли мой ответ, уважаемый GasDM21? |
| Молчание - знак согласия!
|
|
|
|