Решить на С++
У Сергея, как и у любого человека, есть свой «пунктик». Если ему надо поехать на поезде, то
он покупает только «счастливый билет».
Счастливый билет – это такой билет, в номере которого сумма цифр левой и правой
половины совпадает.
Причем, если количество цифр в номере билета нечетное, то центральная цифра
игнорируется.
Раньше Сергей выполнял эти вычисления «в голове», но теперь Вы можете ему
Формат ввода
Большое целое число, состоящее минимум из двух разрядов.
Формат вывода
YES – если число счастливое.
NO – если число несчастливое.
Пример 1
Ввод Вывод
121 YES
Пример 2
Ввод Вывод
12 NO
#include <iostream>
typedef long long ll;
using namespace std;
bool ll_is_valid(ll t, ll N, ll x, ll y)
{
return t / x + (t - x) / y >= N;
}
ll f(ll N, ll x, ll y)
{
ll R = 1;
while (!ll_is_valid(R,N,x,y)) R *= 2;
ll L = R / 2;
while(R - L > 1)
{
ll M = (L + R) / 2;
if (!ll_is_valid(M,N,x,y)) {L = M;}
else {R = M;}
}
return R;
}
int main()
{
ll N,x,y;
cin >> N >> x >> y;
if(x > y) swap( x, y );
cout << f(N, x, y) << std::endl;
}
Для ручного ввода числа:
a = int(input('Введите число: '))
b = bin(a)[2:]
print(b)
if b.count('1')%2 == 0:
b+='10'
else:
b+='00'
print(b)
print(int(b, base=2))
Числа, получившиеся в интервале от 16 до 32:
def getNumber(x):
b = bin(x)[2:]
print(b)
if b.count('1')%2 == 0:
b+='10'
else:
b+='00'
print(b)
return int(b, base=2)
i=1
k=0
count=0
while k<=32:
print(i)
k=getNumber(i)
print(k)
print()
i+=1
if 16 <= k <= 32: count+=1
print(f'Количество выходных чисел в промежутке от 16 до 32 равно {count}')
ответ: Количество выходных чисел в промежутке от 16 до 32 равно 5