Форум » Выполнение и анализ алгоритмов для исполнителей » 5_305 » Ответить

5_305

elzara: Исполнитель Сыщик получает на вход натуральное число N и строит новое число R следующим образом. 1) Строится шестнадцатеричная запись числа N. 2) Далее эта запись обрабатывается по следующему правилу: а) Если число чётное, справа приписывается максимально возможная цифра, в противном случае справа приписывается 0. б) Справа приписывается шестнадцатеричная цифра – остаток от деления суммы цифр шестнадцатеричной записи на 16. в) Пункт б выполняется ещё один раз. Полученная таким образом запись является шестнадцатеричной записью искомого числа R. Укажите минимальное число N, для которого максимальная цифра в полученной шестнадцатеричной записи встречается в пять раз чаще, чем минимальная. В ответе это число запишите в десятичной системе счисления. Подскажите пожалуйста с чего начать?

Ответов - 2

s11kai: elzara пишет: Подскажите пожалуйста с чего начать? Как один из вариантов, наверное с цикла! for i in range(10,300):#В процессе работы, данное число нужно будет увеличивать или заменить данный цикл на while затем выполняем пункт 1) значение переменной цикла переводим в 16 СС, например, так: s = hex(i)[2:] или так:[pre2] st = i s = '' while st: s = str(st%16) + s st = st//16 [/pre2] после чего переходим к следующему пункту 2)а проверяем четность числа, и если оно четное, а вот с этого места идет неясность условия, не совсем понятно, что имеет ввиду автор: " а) Если число чётное, справа приписывается максимально возможная цифра, в противном случае справа приписывается 0." можно предположить, что это должна быть максимально возможная цифра десятичной системы счисления, поскольку в следующем условии конкретно оговорено: "б) Справа приписывается шестнадцатеричная цифра – остаток от деления суммы цифр шестнадцатеричной записи на 16 " Поэтому можно рассмотреть обе версии, но в более компактной записи, например, так: [pre2] for i in range(10,100): s = hex(i)[2:] + ('9' if i % 2 == 0 else '0') ... Либо так: for i in range(10,100): s = hex(i)[2:] + ('f' if i % 2 == 0 else '0') ... [/pre2] ... и так далее, согласно списку правил из условия

s11kai: Полное решение в компактном виде может выглядеть примерно так: [pre2] #если максимальное число пункта а) в десятичной системе счисления def su( s ): res = sum( int(x,16) for x in s ) return res for i in range(100000,200000): s = hex(i)[2:] + ('9' if i % 2 == 0 else '0') s += hex(su(s)%16)[2:] s += hex(su(s)%16)[2:] if 5*s.count(min(s)) == s.count(max(s)) : print('вариант 1','10-е',i,'16-е',s ) #если максимальное число пункта а) в шестнадцатеричной системе счисления def su( s ): res = sum( int(x,16) for x in s ) return res for i in range(100000,200000): s = hex(i)[2:] + ('f' if i % 2 == 0 else '0') s += hex(su(s)%16)[2:] s += hex(su(s)%16)[2:] if 5*s.count(min(s)) == s.count(max(s)): print('вариант 2','10-е',i,'16-е',s ) [/pre2] Если кому будет нужно, то можно представить данное решение и в более развернутом виде (без использования функций питона)



полная версия страницы