В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
Russ1357900
Russ1357900
23.04.2021 11:52 •  Информатика

РЕШИТЬ Алиса учится работать с двоичными числами. Она уже поняла, что число в двоичной записи получается в несколько раз длиннее, чем в десятичной. А еще она поняла, что нули писать дольше чем единицы. И теперь ее любимые числа — это те, двоичная запись которых содержит как можно больше единиц. Алисе дали задание — выбрать одно произвольное число из заданного закрытого интервала [a;b][a;b] и перевести его в двоичную запись. И теперь Алиса просит, чтобы вы написали программу, которая найдет в этом интервале число, двоичная запись которого содержит наибольшее количество единиц. Если таких чисел будет несколько, то Алиса будет рада любому из них.

Формат входных данных
На вход через пробел подаются два натуральных числа aa и bb. При этом 1\leq a\leq b \leq 10^{18}1≤a≤b≤10
18
. Обратите внимание, что для хранения таких чисел в программе на С++ вам потребуется тип long long. В программе на PascalABC такой тип называется Int64.

Формат выходных данных
Программа должна вывести одно целое число из заданного диапазона, двоичная запись которого содержит наибольшее количество единиц. Само число следует выводить в десятичной записи.

Методика проверки и пояснение к тесту
Программа проверяется на 20 тестах. Прохождение каждого теста оценивается в При этом в первых пяти тестах 1\leq a\leq b \leq 10001≤a≤b≤1000. Тесты из условия задачи при проверке не используется.

Sample Input 1:
150 200

Sample Output 1:
191

Sample Input 2:
1 255

Sample Output 2:
255

Sample Input 3:
127 200

Sample Output 3:
127

Показать ответ
Ответ:
youngfng
youngfng
18.03.2023 15:32
Сделать эту задачу можно двумя Первый - чисто арифметический. Второй - более хитрый, через операции над строками. Мы пойдем вторым путем, он короче и практичней, такой код будет требовать меньше ресурсов машины для реализации (что незаметно в таких маленьких задачках, но довольно критично в реальной жизни, поэтому учимся писать дальновидные коды).

Var n:longint;

Function MinDigit(n:longint):integer;
var s,a:string; c,i:integer;
begin
 str(n,s);
 a:=s[1];
 for i:=2 to length(s) do
   if s[i]<a then a:=s[i];
 val(a,n,c);
 MinDigit:=n;
end;

Function MaxDigit(n:longint):integer;
var s,a:string; c,i:integer;
begin
 str(n,s);
 a:=s[1];
 for i:=2 to length(s) do
   if s[i]>a then a:=s[i];
 val(a,n,c);
 MaxDigit:=n;
end;

Begin
 readln(n);
 writeln(MinDigit(n),' ',MaxDigit(n));
End.

По факту переменную "c" можно убрать из функций и использовать вместо нее уже не нужную в конце "i", таким образом избавившись от одной переменной. Но это не принципиально на самом деле, к тому же так понятней, какая переменная за что отвечает.
0,0(0 оценок)
Ответ:
EnenkoDana
EnenkoDana
12.02.2020 01:09
Program  Kasyanova98_1;
uses crt;
var n,nt,p:integer;
  begin
  writeln('***   Alphaues is thinking...   ***');
  write('Ok, введите натуральное число N = ');
  readln(n);
  nt:=n;
  while nt>=10 do
    begin
      p:=nt;
      nt:= nt div 10;
    end;
  writeln('Cумма первых двух цифр числа ',n,' равна ',(p div 10)+(p mod 10));
  writeln('Произведение первых двух цифр числа ',n,' равно ',(p div 10)*(p mod 10));
end.

Program  Kasyanova98_2;
uses crt;
var n,nt,sum,kw,temp:integer;
  begin
  writeln('***   Alphaues is thinking...   ***');
  write('Ok, введите натуральное число N = ');
  readln(n);
  nt:=n;
  sum:=0;
  kw:=1;
  while nt>=1 do
    begin
    temp:=nt mod 10;
    sum := sum + temp;
    kw:=kw * temp;
    nt := nt div 10;
  end;
  if kw*kw=sum*sum*sum then
      writeln('Квадрат произведения цифр числа ',n,' равняется кубу суммы его цифр')
    else
writeln('Квадрат произведения цифр числа ',n,' НЕ равняется кубу суммы его цифр');
end.

Program Kasyanova98_3.1;
uses crt;
const n=10;
var
  x,y:integer;
begin
  writeln('');
  writeln('*                   ТАБЛИЦА УМНОЖЕНИЯ                  *');
  writeln('');
  write('*    * ');
  for y:=1 to n do
    begin
      write(y:2);
      if y<n then write(' | ')
      else      writeln(' * ');
    end;
  writeln('');
  for x:=1 to n do
    begin
      write('* ',x:2, ' * ');
      for y:=1 to n do
         begin
          write(x*y:2);
          if y<n then write(' | ')
        end;
        if x*y<100 then writeln(' * ')
                   else writeln('* ');
        if x<10 then writeln('++')
                else writeln('');
    end;
end.

Program Kasyanova98_3.2;
uses crt;
const n=10;
var
  x,y:integer;
begin
  writeln('');
  writeln('*                   ТАБЛИЦА СЛОЖЕНИЯ                   *');
  writeln('');
  write('*    * ');
  for y:=1 to n do
    begin
      write(y:2);
      if y<n then write(' | ')
      else      writeln(' * ');
    end;
  writeln('');
  for x:=1 to n do
    begin
      write('* ',x:2, ' * ');
      for y:=1 to n do
         begin
          write(x+y:2);
          if y<n then write(' | ')
        end;
        if x+y<100 then writeln(' * ')
                   else writeln('* ');
        if x<10 then writeln('++')
                else writeln('');
    end;
end.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота