![]() |
|
Модераторы: bsa |
![]()
|
|
| Sahon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.3.2011 Где: Украина Репутация: нет Всего: нет |
Задача Del. Дано ряд последовательных натуральных чисел от n до m, из которого удаляют сначала все числа, которые стоят на непарных местах, и так делают до тех пор, пока не останется одно единственное число. Напишите программу, которая найдет это число.
Технические условия. Программа Del читает с клавиатуры числа n и m через пропуск (n<m<1000000). Программа выводит на экран единственное искомое число.
В чем моя ошибка? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
Отладчиком пробовали?
|
|||
|
||||
| Sahon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.3.2011 Где: Украина Репутация: нет Всего: нет |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Тут отладчик пока еще не нужен
так не скомпилируется. Размер массива должет быть компайл-тайм констант. ps:Задачка вроде ничо, чуть попозже напишу чо-нибудь (щас занят), если никто не напишет до меня. а что такое непарные? может имелось ввиду нечетные ??? |
|||
|
||||
| Silent |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
я бы решил эту задачу совсем другим образом, без массивов:
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Silent, мыслите верно! (хотя ваша программа и неверна).
Здесь вообще не нужен массив, тем более в условии есть подсказка Мульон элементов!!! задачка видимо из старых времен, когда массив из мульона был невозможен, да и в наше время мульон элементов это очень не хило! А если учесть еще и цикл по мульону элементов! Задачка решается гораздо быстрее и без бешенных затрат памяти и времени. если посмотреть после 1-го прохода останутся числа: 0,2,4,6,8,10,12,14,16,18, ... после 2-го прохода: 0,4,8,12,16, ... после 3-го: 0,8,16, ... в общем, после n проходов остаются числа pow(2,n)*k, где k целое 0,1,2,3... Короче, объясняльщик из меня плохой. Вот функция, возвращает номер оставшегося элемента, по входным (n,m)
Задачка понравилась. Silent, n=4 m=15 правильный ответ: 8, ваша программа выдает 11 ? n=3 m= 7 правильный ответ: 4, ваша программа выдает 6 ? и т.д. |
|||
|
||||
| Sahon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.3.2011 Где: Украина Репутация: нет Всего: нет |
volatile, спасибо большое. Задачка олимпиадная (прошлогодняя) для 9 класса. Вот из-за недостатка знаний не совсем понимаю ход ваших мыслей.
Полный код, как я понял, должен выглядеть примерно так:
|
|||
|
||||
| Sahon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.3.2011 Где: Украина Репутация: нет Всего: нет |
Это сообщение отредактировал(а) Sahon - 8.4.2011, 22:23 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Ну вобщем-то да, где-то так. Ну, если уж быть совсем педантичным
то надо читать через пропуск (имеется ввиду пробел видимо.)
|
|||
|
||||
| Sahon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.3.2011 Где: Украина Репутация: нет Всего: нет |
volatile, еще раз спасибо. Но вот можете ли вы сам алгоритм объяснить мне, а то я не совсем понимаю ход ваших мыслей?
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
смысл программы найти в диапазоне [n..m] число, в состав которого входит наибольшее ко-во двоек.
В двоичном представлении это равносильно числу с большим количесвом нулей в конце. в начале берется маска (-1) - это все единицы, и на каждом шаге сдвигается влево. по шагам: 11111111111111111111111111111111 11111111111111111111111111111110 11111111111111111111111111111100 11111111111111111111111111111000 11111111111111111111111111110000 эта маска накладывается на n и m и числа сравниваются. Как только они стали равны, маска вышла за диапазон [n..m], берем предпоследнее полученное число, оно у нас в res, это и будет число с максимальным количеством нулей в конце, находящееся в диапазоне [n..m] ps: Это двочная арифметика, Не забивайте голову. Для новичков, наверное нужно было привести какое-то более наглядное решение, хоть и не такое быстрое. Но у меня решение такое.. ( может быть кто-нибудь даст более понятное решение? ) |
|||
|
||||
| Silent |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
Видимо, я не так понял условие задачи. Что такое - "на непарных местах"?
Мое понимание задачи (n=4, m=15): Строим последовательность: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 вычеркиваем на нечетных позициях: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -> 5, 7, 9, 11, 13, 15 повторяем шаги с новой последовательностью: 5, 7, 9, 11, 13, 15 -> 7, 11, 15 7, 11, 15 -> 11 т.е. итеративное удаление из последовательности элементов на нечетных местах |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Silent, а возможно вы и правы Тут с условиями, действительно не вполне понятно. и еще есть ли нулевой элемент, или счет у них начитается с 1? Оставим это на совести составителей/переводчиков задания... Ну, да ладно, проехали |
|||
|
||||
| Silent |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 3.10.2006 Репутация: 1 Всего: 9 |
Sahon, уважаемый, поясните нам задачу, а вообще б великолепно - процитировать речь организаторов олимпиады с разбора задач.
В интернете я нашел http://www.cyberforum.ru/cpp-beginners/thread268470.html, где создателем аналогичной темы неким Sahon'ом дается пояснение задачи. Я процитирую, (хотя без явного "да, тот товарищъ - я" "нашего" Sahon'а это всего лишь очередной домысел):
И в этом свете получается - моя правота. Мое мнение - нужно слово Sahon'а. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |