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

4. в приведённом програмном коде
Решите


4. в приведённом програмном коде Решите

Показать ответ
Ответ:
Runet13
Runet13
16.03.2023 23:21

(см. объяснение)

Объяснение:

Pascal:

var x, m, s, d: integer;

begin

 for i: integer := 1 to 150 do

 begin

   x:= i;

   m:= 0;

   s:= 0;

   while(x>0) do

   begin

     d:= x mod 7;

     s:= s+d;

     if(d>m) then

       m:= d;

     x:= x div 7;

   end;

   if((m=5) and (s=12)) then

     writeln(i);

 end;

end.

Python:

for i in range(1, 150):

   x = i

   m = s = 0

   while x > 0:

       d = x % 7

       s += d

       if d > m:

           m = d

       x //= 7

   if m == 5 and s == 12:

       print(i)

Аналитическое решение:

Перейдем в семеричную систему счисления. Тогда операция mod 7 будет получать последнюю цифру исходного числа. Заметим также, что в переменную m кладется максимальная цифра из введенного числа. Тогда нам нужно, чтобы цифра 5 стояла в разряде единиц и была наибольшей в числе. Понятно, что двузначное число, удовлетворяющее этим условиям, собрать нельзя. Предположим, что число трехзначное, начинающееся на 1. Тогда оно имеет вид 1?5, где ?≤5. Но 1+5+5<12, поэтому такой случай никогда не приведет к интересующему ответу. Пусть число имеет вид 2?5. Тогда 2+5+5=12, то есть число 255 нас устраивает. Переведя его в десятичную систему счисления, получаем, что ответом будет число 138.

Задание выполнено!

0,0(0 оценок)
Ответ:
AceAlone
AceAlone
15.11.2020 06:03

#include <iostream>

using namespace std;

int main(){

   long long a;

   int n, bits[64]={0}, i=0;

   cin>>a>>n;

   while(a!=0){

       if(a%2==0)

           a/=2;

       else {

           bits[i]=1;

           a=(a-1)/2;

       }

       i++;

   }

   cout<<bits[n-1];

}

Я обнаружил несколько недочетов в условии. Во-первых, вызвало недоумение то, что сначала номер бита обозначен n, тогда как в диапазоне его значений используется уже буква b. Ладно, допустим, обычная опечатка. Во-вторых, для записи максимально возможного числа 10¹⁸ в двоичной системе потребуется 60 цифр, но здесь утверждается, что спросят не дальше 32 бита. Тогда зачем предусматривать столь большие a? В-третьих, только из примеров стало понятно, что биты нумеруются справа налево

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота