С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
-2 / 6 / 5
Регистрация: 19.01.2022
Сообщений: 201
1

Деление на два

19.02.2022, 10:57. Показов 2568. Ответов 36
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Гоша очень любит делить числа на два. Иногда он развлекается следующим образом: берет какое-то число x, и делит его на два, потом результат снова делит на два, и так далее, пока не получит нечетное число. Например, если он выбрал число x=24, то сначала у него получится 12, затем 6, затем 3. Гоше нравится, когда этот процесс продолжается долго, поэтому он просит вас найти число из диапазона от a≤x≤b, выбрав которое можно делить на два как можно больше раз.



Входные данные:
Первая строка содержит число a, вторая строка содержит число b (1≤a≤b≤1012).




Выходные данные:
Выведите число x, которое нужно выбрать. Если ответов несколько, выведите любой.




Примеры:
входные данные
20
30
выходные данные
24


входные данные
316
412
выходные данные
384


входные данные
1
1000000000000
выходные данные
549755813888


входные данные
15
15
выходные данные
15
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2022, 10:57
Ответы с готовыми решениями:

Задать два числа как два массива и потом выполнить сложение, умножение и деление
Здравствуйте! Суть задачи в следующем: Нужно задать два числа как два массива и потом выполнить...

Деление Wav-файла на два канала
Реализовать функцию разделяющую входной wav файл на каналы (на два выходных файла) с возможностью...

Деление на два
Гоша очень любит делить числа на два. Иногда он развлекается следующим образом: берет какое-то...

Деление файла на два
Не могу понять в чем ошибка.Выдает такой результат file D:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Программа про деление на два
Дано три целых числа, вывести на екран те из них которые являются чётыми

36
Вездепух
Эксперт CЭксперт С++
12802 / 6677 / 1797
Регистрация: 18.10.2014
Сообщений: 16,900
19.02.2022, 11:14 2
Цитата Сообщение от shinzin Посмотреть сообщение
входные данные
1
1000000000000
выходные данные
549755813888
Но в условии сказано:

Цитата Сообщение от shinzin Посмотреть сообщение
1≤a≤b≤1012
Откуда вдруг взялось 1000000000000?
0
-2 / 6 / 5
Регистрация: 19.01.2022
Сообщений: 201
19.02.2022, 11:22  [ТС] 3
10 в 12 степени
0
7 / 6 / 1
Регистрация: 18.02.2022
Сообщений: 30
19.02.2022, 11:59 4
блин а как решить то
0
6 / 6 / 0
Регистрация: 09.07.2021
Сообщений: 63
19.02.2022, 12:40 5
не знаю
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2022, 15:59 6
Цитата Сообщение от Ivan_bebrovich Посмотреть сообщение
как решить то
Я бы нашел максимальную степень двойки, меньшую или равную b.
Пусть это x = 2k <= b
Затем надо умножить x на n, чтобы n*x попал в интервал
....
Однако пример 15 15 опровергает мои построения
....
А какие у вас идеи?
0
6 / 6 / 0
Регистрация: 09.07.2021
Сообщений: 63
19.02.2022, 16:05 7
Цитата Сообщение от Байт Посмотреть сообщение
Я бы нашел максимальную степень двойки, меньшую или равную b.
Пусть это x = 2k <= b
Затем надо умножить x на n, чтобы n*x попал в интервал
А если нет степени двойки, то проходимся по всем четным (или единственному нечетному, как с 15 15) элементам, и делим на 2, помещаем в словарь, ключи-числа, значения-сколько раз можно разделить, и находим максимум.
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2022, 16:18 8
maxevtish0501, то есть перебор. Однако, мне кажется, что задачу можно решить "напрямую" бз перебора...
0
4 / 3 / 1
Регистрация: 24.03.2021
Сообщений: 71
19.02.2022, 16:23 9
Байт, напишите пожалуйста код, я уже целую вечность над этой задачей маюсь
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2022, 16:37 10
Цитата Сообщение от JEHTUNBIRBIKAM Посмотреть сообщение
Байт, напишите пожалуйста код
Да нет у меня решения. Я же сказал.
Цитата Сообщение от JEHTUNBIRBIKAM Посмотреть сообщение
целую вечность над этой задачей маюсь
Так покажи нам свои усилия. А то прослывешь халявщиком.
0
4 / 3 / 1
Регистрация: 24.03.2021
Сообщений: 71
19.02.2022, 16:42 11
Байт,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
n = int(input())
m = int(input())
a = 0
nt = 0
nta = ""
c = ''
while n > 0:
    c = str(n % 2) + c
    n = n // 2
b = ''
while m > 0:
    b = str(m % 2) + b
    m = m // 2
if len(c) == len(b):
    while c[nt] == b[nt]:
        nt = nt + 1
    for i in range(nt + 1):
        nta = "1" * (nt + 1)
    for j in range(len(b) - (nt + 1)):
        nta = nta + "0"
    print(int(nta, 2))
 
 
 
 
while n > 0:
    c = str(n % 2) + c
    n = n // 2
while m > 0:
    b = str(m % 2) + b
    m = m // 2
print(c)
print(b)
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2022, 16:47 12
JEHTUNBIRBIKAM, но это же ни Си и не С++!!
Вообще решение уважаемогоmaxevtish0501, не так уж и плохо. Я просто капризный
1
4 / 3 / 1
Регистрация: 24.03.2021
Сообщений: 71
19.02.2022, 17:01 13
Байт, Извините, не понял. Это же язык С++, вроде)

Добавлено через 1 минуту
Байт, не могли бы вы реализовать решение уважаемого maxevtish0501, очень нужно)

Добавлено через 9 минут
Байт, Ох ты ж емое, запутался. Это действительно питон...
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2022, 17:03 14
Цитата Сообщение от JEHTUNBIRBIKAM Посмотреть сообщение
Это же язык С++, вроде)
Нет!
Цитата Сообщение от JEHTUNBIRBIKAM Посмотреть сообщение
Байт, не могли бы
После твоей идиотской просьбы в личку, я вообще с тобой разговаривать не хочу. И не будь назойливым.
Сказа я раз "Нет!" - значит нет. И не заставляй повторять
1
0 / 0 / 0
Регистрация: 19.02.2022
Сообщений: 3
19.02.2022, 17:26 15
1) Создать список из степеней двойки: (1, 2, 4 и т.д.)
2) Найти такое число X, которое будет делиться на степень двойки и принадлежать отрезку: a <= X <= b.
3) Если такое число найдено, то вывести это число, иначе вывести a.
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2022, 17:37 16

Не по теме:

JEHTUNBIRBIKAM, Ладно! Повинную головы меч не сечет


Вот так можно попробовать (перебор, но слегка модифицированный)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
long step = 1, s;
long Otv = a;
int m = 0;
for (long k =a; k <=b; k+= step) {
  int p = 0;
  long t = k;
  for(p =0, s =1; t %2 ==0; p++) {
      t /= 2;
      s *=2;
  }
  if ( p > m) {
    m = p;
    Otv = k;
    step = s;
  } 
}
cout << Otv;
Добавлено через 3 минуты
Цитата Сообщение от HaisTous Посмотреть сообщение
Найти такое число X, которое будет делиться на степень двойки и принадлежать отрезку
Сомнительный момент
0
90 / 60 / 32
Регистрация: 06.08.2020
Сообщений: 219
19.02.2022, 17:40 17
Решил простым перебором, но при вводе 1 и 1000000000000 зависает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include<iostream>
using namespace std;
 
//функция для граничных условий
bool borders(int a, int b) {
    if (1 <= a && a <= b && b <= 1012) {
        return true;
    }
    else if (a < 1 || a > b) {
        cout << "a out of borders!\n";
        return false;
    }
    else if (b > 1012) {
        cout << "b out of borders!\n";
        return false;
    }
}
//возвращает количество делений по условию
int countDiv(int x) {
    int counter = 0;
    while (x % 2 == 0) {
        x /= 2;
        ++counter;
    }
    return counter;
}
 
int main() {
    cout << "Inter 'a' & 'b': ";
    int a = 0;
    int b = 0;
    cin >> a >> b;
    while (!(borders(a, b))) {
        cin >> a >> b;
    }
    int maxDiv = 0; //для максимальногочисла делений
    //идем циклом по интервалу a-b
    for (int i = a; i <= b; ++i) {
        int cDiv = countDiv(i); 
        if (cDiv > maxDiv) {
            maxDiv = cDiv;
            a = i; //в a сохраняем искомое число
        }
    }
    cout << a << endl;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 19.02.2022
Сообщений: 3
19.02.2022, 18:01 18
Добавлено через 59 секунд
Ничего сомнительного нет. Так как нам нужно найти число в заданном промежутке, которое будет максимально часто делиться на степень двойки, то мы ищем:
a <= X * 2^z <= b
⌈a // 2 ^ z⌉ <= X <= ⌊b // 2 ^ z⌋
Перебирать нужно z от большего к меньшему.

Добавлено через 13 минут
Выше идею скинул, но код прикреплять пока не буду, так как в данный момент эта задача из онлайн олимпиады по программированию среди школьников (сегодня/завтра проходит).
0
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2022, 18:13 19
Цитата Сообщение от HaisTous Посмотреть сообщение
код прикреплять пока не буду
Подождем кода.
Но вашей идеи я пока н понял
В моем коде фишка в том, что если встретилось 44, то до 48 рассматривать числа уже не нужно, а после 48 можно шаг увеличить до 8. То есть шаг постоянно увеличивается...
0
0 / 0 / 0
Регистрация: 19.02.2022
Сообщений: 3
19.02.2022, 18:23 20
Цитата Сообщение от Байт Посмотреть сообщение
Подождем кода.
Но вашей идеи я пока н понял
В моем коде фишка в том, что если встретилось 44, то до 48 рассматривать числа уже не нужно, а после 48 можно шаг увеличить до 8. То есть шаг постоянно увеличивается...
Рассмотрим этот пример:
входные данные
316
412
выходные данные
384

Начнем рассматривать степени двойки от наибольшей к наименьшей: 256. Не такого целого числа, которое можно умножить на целое число и получить число, которое будет внутри промежутка [316; 412]. Рассматриваем число 128. Существует число 3, так как 316 <= 3*128=384 <= 412. Значит это и будет ответом.
0
19.02.2022, 18:23
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2022, 18:23
Помогаю со студенческими работами здесь

Деление звукового сигнала на два канала
Всем привет ! Петцольд в статье описал как реализовать выдачу сигнала на оба канала... А есть...

Деление с выводом остатка два двоичных числа Emu8086
Помогите разобраться.Нужна программа позволяющая делить с выводом остатка два произвольныхх...

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

Деление числа пополам и умножение полученного на два вызывает ошибку
Добрый вечер столкнулся с такой проблемой и ни как не могу решить ее, помогите пжл Работаю в...

Сложный запрос SQL (Деление одного столбца на два по параметрам отбора)
Помогите собрать сложный запрос. Есть таблица типа: |--idShet--|--Command--|--ActPl--| |...

Даны два действительных положительных числа x и y. Арифметические действия (Умножение,Деление,Вычитание,Сложение)
Даны два действительных положительных числа x и y. Арифметические действия...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
UserScript для подсветки кнопок языков программировани­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форм быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
Как создавать приложения для iOS/iPhone
InfoMaster 12.01.2025
Введение в разработку iOS-приложений Разработка приложений для iOS открывает огромные возможности в мире мобильных технологий. С каждым годом количество пользователей iPhone и iPad растет,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru