Модераторы: volvo877, Snowy, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Делимость на 3 
:(
    Опции темы
banan
Дата 7.12.2004, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.11.2004
Где: Киев

Репутация: нет
Всего: нет



Дано ряд чисел:1,12,123…,12345678910,
Узнать сколько чисел с первых N чисел делится на 3
Пример входящих данных:4
Пример исходящих данных:2

Это сообщение отредактировал(а) banan - 7.12.2004, 21:37
PM MAIL   Вверх
maxim1000
Дата 7.12.2004, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



тут все становится просто, если вспомнить, что делимость числа на 3 это все равно, что делимость суммы его цифр на 3



--------------------
qqq
PM WWW   Вверх
Vit
Дата 7.12.2004, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



N mod 3 = 0


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 7.12.2004, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



Цитата
N mod 3 = 0

тогда получается, что количество не может быть больше 2



--------------------
qqq
PM WWW   Вверх
Zero
Дата 7.12.2004, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Всё правильно у Vit'а
Код

program pr;
var
 i,j,k,n,code:integer;
 s,s1:string;
Begin
 write('Введите N=');
 readln(n);
 s:=''; k:=0;
 for i:=1 to n do
   begin
     str(i,s1);
     s:=s+s1;
     val(s,j,code);
     if code>0 then
       begin
         writeln('Переполнение разрядной сетки!!!');
         exit;
       end;
     if (j mod 3)=0 then k:=k+1;
   end;
 writeln('На 3 делится "',k,'" последовательностей')
End.

Возможно до этого ты его не так понял...

Это сообщение отредактировал(а) Zero - 7.12.2004, 22:17
PM MAIL ICQ   Вверх
Zero
Дата 7.12.2004, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Да, кстати можно было и твоим (maxim1000) способом делать...
Zero: Вопрос первому из администраторов кто имеет отношение в создании сайта...
Почему, я нажал на кнопку своего сообщения Цитата, а получилось за место слов "добавлено", новое сообщение создалось??? Какой то глюк, тут...


Это сообщение отредактировал(а) Zero - 7.12.2004, 22:33
PM MAIL ICQ   Вверх
maxim1000
Дата 7.12.2004, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



Цитата
Всё правильно у Vit'а

Sorry, я просто подумал, что это уже ответ

думаю, интерес представляет решение этой задачи для N, больших 10 (а даже при таком N возникнет переполнение)
каждое следующее число добавляет N mod 3
последовательность таких добавок: 1, 2, 0, 1, 2, 0, ...
если посмотреть на последовательность остатков от деления на 3, то увидим, что на 3 не делится каждое третье число (если нумеровать с нуля)
вот и получаем:
n - (n+2) div 3
Добавлено @ 22:35
Цитата
Да, но с дуальными числами всё по другому  например 3 в дуальной системе 11 ....

а что подразумевается под дуальными числами?



--------------------
qqq
PM WWW   Вверх
sergejzr
Дата 7.12.2004, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(maxim1000 @ 7.12.2004, 21:32)

а что подразумевается под дуальными числами?

Ладно, забудем smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
banan
Дата 8.12.2004, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.11.2004
Где: Киев

Репутация: нет
Всего: нет



1<=N<=2 000 000
PM MAIL   Вверх
Zero
Дата 8.12.2004, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(banan @ 8.12.2004, 00:09)
1<=N<=2 000 000

Похоже banan'у не понравилось наше решение, с огроничением N до 9, может кто-нибудь придумает алгоритм, с учётом этого условия...
PM MAIL ICQ   Вверх
Vit
Дата 8.12.2004, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



N mod 3 - выдаёт остаток от деления на 3, если число делится на 3 то выдаётся 0

Если числа слишком большие то надо найти сумму цифр числа и разделить на 3 и посмотреть остаток.

А вычислять количество делящихся чисел в ряду - это пожалуйста - сами решайте, или обращайтесь в раздел алгоритмов...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Zero
Дата 8.12.2004, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Vit @ 8.12.2004, 00:32)
А вычислять количество делящихся чисел в ряду - это пожалуйста - сами решайте, или обращайтесь в раздел алгоритмов...

Так я и думал, здесь никто не захочит мучится...
PM MAIL ICQ   Вверх
Vit
Дата 8.12.2004, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Цитата(Zero @ 7.12.2004, 16:27)
Так я и думал, здесь никто не захочит мучится...



Не в этом дело, мне, да не только мне но и многим здесь написать такую штуку несколько минут работы (если я правильно понял задание), но для меня совершенно очевидно, что это учебная задача, и если я дам готовый ответ, человек спишет его и ничему не научится, лучше я объясню куда двигаться, объясню какой-то момент, но задачу решить человек должен сам! Помогать буду, решать за другого нет!


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Zero
Дата 8.12.2004, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Vit @ 8.12.2004, 04:48)
Помогать буду, решать за другого нет!

Хорошо сказано... Филосовский подход. smile
Я именно так и сделаю, короче алгоритм такой:
1. Организуеш ввод числа, N (в моём примере выше это показано)
2. Создаш цикл от i до N (в начале i=1)
3. В нём сделаеш собрание суммы i-ых значений, и одновременно проверка суммы с помощью опратора mod, где если остаток есть то какой-нибудь счётчик прибавится на единицу.
4. Но впринципе и всё, выведеш последнее значение счётчика.

P. S.:Если не сможеш сделать в течении дня, то пиши, скину прогу.

Это сообщение отредактировал(а) Zero - 8.12.2004, 11:01
PM MAIL ICQ   Вверх
maxim1000
Дата 8.12.2004, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



ой... а может, никто не заметил?
Цитата
n - (n+2) div 3



--------------------
qqq
PM WWW   Вверх
banan
Дата 8.12.2004, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.11.2004
Где: Киев

Репутация: нет
Всего: нет



Работает,спасибо
PM MAIL   Вверх
Pakshin A. S.
Дата 8.12.2004, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Вот, есть решение здеся... http://pakshin.com.ru/forum/index.php?show...5&st=0&#entry17 smile
PM   Вверх
Zero
Дата 8.12.2004, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Pakshin A. S., зачем так сложно, вопервых он уже вроде сам решил, во вторых можно намного проще: smile
Код

program pr;
var
i,k,n,sum:longint;
begin
 sum:=0; k:=0;
 write('Введите N=');
 readln(n);
 for i:=1 to n do
   begin
     sum:=sum+i;
     if (sum mod 3)=0 then k:=k+1;
   end;
 writeln('На 3 делится "',k,'" последовательностей')
end.

Да ктому же тут доплнительное "банановое" условие выполняется: 1<=N<=2000000 smile

Это сообщение отредактировал(а) Zero - 8.12.2004, 23:51
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 9.12.2004, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Zerosum переполнится при N = 2000000, может быть, хотя вряд ли... избегаем этих недоразумений...
поэтому делаем так:
Код

var
i,j:longint;
n:longint;
col:longint;
sum:longint; {может даже integer сойдеть} {Сумма цифр}
begin
readln(n);
col:=0;
sum:=0;
for i:=1 to n do
 begin
  j:=i;
  while j <> 0 do
   begin
    sum:=sum + j mod 10;
    j:=j div 10;
   end;
  if (sum mod 3) = 0 {Сумма делится на 3 => число делится на 3}
   then
    begin
     sum:=0; {Вот и не переполнится...}
     col:=col + 1;
    end;
 end;
writeln(col);
readln;
end.

А это уже и на n=2147483647 работать будет!!!
Пояснение:
шаг рассматриваемое число
1 1
2 12
3 3
4 4
5 45
6 6
7 7
8 78
9 9
10 10
11 1011
12 12
13 13
14 1314
15 15
16 16
17 1617
и т. п.....
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

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

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.