Такие задания со сложными условиями легче всего решать программой на питоне:
for n in range(1, 10000000): # Грубый перебор
n -= n % 4 # 1. Из числа N вычитается остаток от деления N на 4.
n = bin(n)[2:] # 2. Строится двоичная запись полученного результата. + срез "0b"
n = n + str(n.count('1') % 2) # 3. a)
n = n + str(n.count('1') % 2) # 3. б)
r = int(n, 2) # Перевод в 10 с.с.
if r > 56:
print(r)
break
ответ: 66
Если всё же рассуждать, то опять перебором:
Возьмём, например, число 5 и выполним алгоритм:
1. 5 - 5 % 4 = 4
2. 4 -> 100
3. a) 1001
б) 10010
R = 18, очень мало
Возьмём, например, 14:
1. 12
2. 1100
3. a) 11000
б) 110000
R = 48, маловато, но близко
Возьмём, например, 15:
Видим, будет тоже, что и 14
Возьмём, например, 16:
1. 16
2. 10000
3. a) 100001
б) 1000010
R = 66, то, что нам нужно.
(см. объяснение)
Объяснение:
Решение на PascalABC.NET:
##
var a: BigInteger := BigInteger.Subtract(BigInteger.Subtract(BigInteger.Multiply(BigInteger.Parse('3'), BigInteger.Pow(BigInteger.Parse('2'), 32)), BigInteger.Pow(BigInteger.Parse('2'), 10)), BigInteger.Parse('3'));
var b: String;
while(a>0) do
begin
b:= BigInteger.Remainder(a, 4).ToString+b;
a:= BigInteger.Divide(a, 4);
end;
print(b.Count(x->x='3'));
Решение на Python3:
a = 3 * 2 ** 32 - 2 ** 10 - 3
b = ''
while a > 0:
b = str(a % 4) + b
a //= 4
print(b.count('3'))
Решение на Java:
import java.math.BigInteger;
public class Study
{
public static void main(String[] args)
System.out.println(BigInteger.valueOf(3L).multiply(BigInteger.valueOf(2L).pow(32)).subtract(BigInteger.valueOf(2L).pow(10)).subtract(BigInteger.valueOf(3L)).toString(4).chars().filter(x->x=='3').count());
}
Результатом работы программ во всех случаях будет одно число 14.
Задание выполнено!
Такие задания со сложными условиями легче всего решать программой на питоне:
for n in range(1, 10000000): # Грубый перебор
n -= n % 4 # 1. Из числа N вычитается остаток от деления N на 4.
n = bin(n)[2:] # 2. Строится двоичная запись полученного результата. + срез "0b"
n = n + str(n.count('1') % 2) # 3. a)
n = n + str(n.count('1') % 2) # 3. б)
r = int(n, 2) # Перевод в 10 с.с.
if r > 56:
print(r)
break
ответ: 66
Если всё же рассуждать, то опять перебором:
Возьмём, например, число 5 и выполним алгоритм:
1. 5 - 5 % 4 = 4
2. 4 -> 100
3. a) 1001
б) 10010
R = 18, очень мало
Возьмём, например, 14:
1. 12
2. 1100
3. a) 11000
б) 110000
R = 48, маловато, но близко
Возьмём, например, 15:
1. 12
Видим, будет тоже, что и 14
Возьмём, например, 16:
1. 16
2. 10000
3. a) 100001
б) 1000010
R = 66, то, что нам нужно.
ответ: 66
(см. объяснение)
Объяснение:
Решение на PascalABC.NET:
##
var a: BigInteger := BigInteger.Subtract(BigInteger.Subtract(BigInteger.Multiply(BigInteger.Parse('3'), BigInteger.Pow(BigInteger.Parse('2'), 32)), BigInteger.Pow(BigInteger.Parse('2'), 10)), BigInteger.Parse('3'));
var b: String;
while(a>0) do
begin
b:= BigInteger.Remainder(a, 4).ToString+b;
a:= BigInteger.Divide(a, 4);
end;
print(b.Count(x->x='3'));
Решение на Python3:
a = 3 * 2 ** 32 - 2 ** 10 - 3
b = ''
while a > 0:
b = str(a % 4) + b
a //= 4
print(b.count('3'))
Решение на Java:
import java.math.BigInteger;
public class Study
{
public static void main(String[] args)
{
System.out.println(BigInteger.valueOf(3L).multiply(BigInteger.valueOf(2L).pow(32)).subtract(BigInteger.valueOf(2L).pow(10)).subtract(BigInteger.valueOf(3L)).toString(4).chars().filter(x->x=='3').count());
}
}
Результатом работы программ во всех случаях будет одно число 14.
Задание выполнено!