Код программы ruby for i in "1000".to_i(8).."7777".to_i(8) s = i.to_s(2) k = 0 s.chars.each {|c| k += 1 if c == "1"} if (k==5) p [i, i.to_s(8), s, k] break end end
Вывод [527, "1017", "1000001111", 5]
ответ 1017
Если решать аналитически, то наверное это делается методом подбора плюс быстрым переводом восьмеричной системы в двоичную (каждая цифра 8чной переводится в 3 цифры 2чной, можно заранее посчитать кол-во единиц для каждой). Сразу понимаем что в числах 1000-1016 будет слишком мало единиц, только "7"_8 переводится в "111"_2. И еще две единицы дают "1"_8
Corneewan
18.03.2021
Во-первых, не whill, а while. Во-вторых, цикл с предусловием(while) выполняется только тогда, когда его условие возвращает ложь. Если условие возвращает правду, цикл завершается. Бывает так, что при попытке первой итерации цикла условие уже возвращает правду. В этом случае цикл не будет выполнен ни разу. Цикл с предусловием(repeat), наоборот, выполняется, пока условие возвращает правду и завершается ложью. Стоит заметить, что если цикл с предусловием проверяет своё условие перед итерацией, цикл с постусловием делает это после, а это значит, что последний выполнится хотя бы один раз.
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
. Практическая работа. Постройте базу данных по предложенной таблице 1. Указав тип полей, определите «Свойства поля».
for i in "1000".to_i(8).."7777".to_i(8)
s = i.to_s(2)
k = 0
s.chars.each {|c| k += 1 if c == "1"}
if (k==5)
p [i, i.to_s(8), s, k]
break
end
end
Вывод
[527, "1017", "1000001111", 5]
ответ
1017
Если решать аналитически, то наверное это делается методом подбора плюс быстрым переводом восьмеричной системы в двоичную (каждая цифра 8чной переводится в 3 цифры 2чной, можно заранее посчитать кол-во единиц для каждой). Сразу понимаем что в числах 1000-1016 будет слишком мало единиц, только "7"_8 переводится в "111"_2. И еще две единицы дают "1"_8