Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2014, 17:48   #1
studentus1985
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 25
По умолчанию Подсчитать элементы последовательности которые делятся на 3

Уважаемые форумчане, помогите решить задачу посредство языка Паскаль или же просто подскажите идею.
Условия:
Есть ряд натуральных чисел: 1,2,3,4....n;
1<=n<=4000000;
Есть последовательность, которая формируется следующим образом, первым елементом является первое число из ряда: 1;
второй елемент является результатом конкатенации предыдущего елемента и второго числа из ряда: "1"+"2"="12";
третий елемент: "12"+"3"="123"...
Вобщем последовательность такая: 1,12,123,1234,12345,123456,1234567, 12345678,123456789,12345678910,1234 567891011...
Задача из n елементов этой последовательности найти количество елементов делящихся на 3.
studentus1985 вне форума Ответить с цитированием
Старый 21.10.2014, 18:12   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
r := 0;
cnt := 0;
for i := 1 to n do begin
   Inc(r, i); r := r mod 3; if r = 0 then Inc(cnt)
end;
WriteLn(cnt)

Последний раз редактировалось Poma][a; 21.10.2014 в 18:24.
Poma][a вне форума Ответить с цитированием
Старый 21.10.2014, 18:35   #3
studentus1985
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 25
По умолчанию

спасибо, оперативно у вас тут)
но за вашим алгоритмом подсчитывается количество елементов кратных 3 из ряда натуральных чисел, а нужно из последовательности, поэтому алгоритм не сработает

Последний раз редактировалось studentus1985; 21.10.2014 в 18:55.
studentus1985 вне форума Ответить с цитированием
Старый 21.10.2014, 18:39   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Это будет работать быстрее 1 сек.
Только Вы получите переполнение.. Поэтому s нужно брать по модулю 3
Poma][a вне форума Ответить с цитированием
Старый 21.10.2014, 18:56   #5
studentus1985
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 25
По умолчанию

но возможно лучше использовать признак делимости на 3 и искать суммы цифр каждого елемента последовательности

Последний раз редактировалось studentus1985; 21.10.2014 в 19:00.
studentus1985 вне форума Ответить с цитированием
Старый 21.10.2014, 19:08   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
но за вашим алгоритмом подсчитывается количество елементов кратных 3 из ряда натуральных чисел
Прошу Вас проверить мой код на правильность.. Ибо я осмелюсь Вас уверить, что он правилен..
Poma][a вне форума Ответить с цитированием
Старый 21.10.2014, 19:10   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

я хочу посмотреть на членЪ последовательности при n=4000000. сколько ахулионов байт он будет занимать?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 21.10.2014, 19:30   #8
studentus1985
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Прошу Вас проверить мой код на правильность.. Ибо я осмелюсь Вас уверить, что он правилен..
Проверил, из 11 елементов последовательности которые есть в первом посте на 3 делятся только 4, но алгоритм говорит что их есть 7!
studentus1985 вне форума Ответить с цитированием
Старый 21.10.2014, 19:34   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
но алгоритм говорит что их есть 7!
кокой-токой олгоритм-шмолгоритм?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 21.10.2014, 19:37   #10
studentus1985
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 25
Смех

Цитата:
Сообщение от min@y™ Посмотреть сообщение
я хочу посмотреть на членЪ последовательности при n=4000000. сколько ахулионов байт он будет занимать?
, я вас понимаю, вот поэтому думаю нужно использовать признак делимости на 3 "число делится на три если сумма цифр всех разрядов этого числа тоже делится на три".
Выход один использовать не прямую последовательность: 1,12,123,1234,12345....
а последовательность из суммы цифр:1,3,6,10,15...
а это у же другое дело
Более того 10,15... можно тоже заменить на на 1+0=1, 1+5=6...
studentus1985 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы. Выбрать все значения, которые делятся нацело на 2 и 4, но не делятся на 6 MrRuslanBB Visual C++ 3 31.05.2013 22:27
как вывести числа которые делятся на 7? Devil669 Общие вопросы C/C++ 12 18.02.2013 00:32
Дан одномерный массив. Удалить все элементы последовательности значения,которые кратны k Кристюша5 Паскаль, Turbo Pascal, PascalABC.NET 4 27.05.2012 21:46
вывести на экран чила от 1 до N, которые делятся на 4 Сергей505 Паскаль, Turbo Pascal, PascalABC.NET 16 12.12.2011 14:25
Вывести на экран номера всех элементов, которые не делятся на 7 wrangler Общие вопросы C/C++ 5 10.12.2009 15:37