IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> 121/11 YES!, Проверка делимости.
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Для делимости числа на 11 необходимо, чтобы разность между суммой цифр, стоящих на четных местах, и суммой цифр, стоящих на нечетных местах, делилась на 11.

Приведу небольшие примеры:
121/11=11. Вывод: yes;
1211/11=110,(09). Вывод: no;

Я в принципе понимаю что данная задача лёгкая, но я хочу поинтересовться по поводу условия задачи:
Там написано, цитирую:
Цитата
"...чтобы разность между суммой цифр, стоящих на четных местах, и суммой цифр, стоящих на нечетных местах, делилась на 11."


Если подбирать под мой пример(1), то я так понимаю это выглядит так: 2-(1+1)/11.
Как видите по примеру нельзя вычислить что данное число делится на 11.

ОБЪЯСНИТЕ СМЫСЛ!


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(Википедия)
Число делится на 11 тогда и только тогда, когда сумма цифр с чередующимися знаками равна 0 или делится на 11 (то есть 182 919 делится на 11, так как 1 — 8 + 2 — 9 + 1 — 9 = −22 делится на 11)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Ага ясно!
То есть для чисел 121 (1-2+1=0) Условие будет выполнятся?

Сообщение отредактировано: Сергей Меркурьев -


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Ну тебе же красным цветом цветом выделили.Да будет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


ДАдада, спасибо)
Вот моё решение к этой задачке)) Не судите строго так сказать)

program metro;
var i,j,sum,ibr,cod:integer;
s,sch:string;
begin
Read(s);
j:=1;
For i:=1 to length(s) do
Begin
sch:=Copy(S,i,1);
Val(sch,ibr,cod);
inc(j);
If j mod 2=0 then Sum:=Sum-ibr
else Sum:=Sum+ibr;
End;
If (sum=0) or (sum mod 11=0) then Write ('YES')
else Write ('NO');
End.


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Я немног оне согласен, с реализацией,если ты читаеш и файла зачем тебе строка?Я бы сделал так.

program metro;
var i,j,sum,ibr,cod:integer;
ch:string[1];
begin
j:=1;
while not eol(fin) do{таже самая строка,только не запоминаем,как переменную и еще я точно не помню,либо eol(fin) либо еоln(fin)}
Begin
read(fin,ch);
Val(ch,ibr,cod);
inc(j);
If j mod 2=0 then Sum:=Sum-ibr
else Sum:=Sum+ibr;
End;
If (sum=0) or (sum mod 11=0) then Write ('YES')
else Write ('NO');
End.

просто зачем тебе полная строка, если ты туда записываеш всего 1 элемент,да и чтобы строку пройти не обязательно ее считывать и запоминать длинну.Я бы вообще использовал на твоем месте не стоку,а чар,тогда и процедура val ушла бы,но тогда надо было бы делать функцию chartoint.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


В этой строке у меня не один элумент, а само выражение! А вторая запоминает элемент. И я с данными функциями ещё не знаком.


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Не надо преобразовывать строку к числу там, где можно обойтись без преобразования. Все проще:
var
n: longint;
curr, s: integer;

begin
readln(n);
curr := 1; s := 0;
while n <> 0 do begin
s := s + curr * (n mod 10);
curr := - curr;
n := n div 10;
end;
if (s = 0) or (abs(s) mod 11 = 0) then writeln('yes')
else writeln('no');
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


А если Вам дано число большее 2 миллиардов? (болше longint)


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


а что тебе чтоит разбить число? посчитаеш первые 9 знаков,потом еще 9 знаков и тд сколько надо.Тут же невашен порядок числа.Все равно операции с одним типом будут быстрее чем преобразование из 1 типа в другой.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Обычное для таких задач ограничение - 109, то есть, один миллиард. Если больше - придется использовать более емкие типы: dword, int64, qword... Ну, или тогда уже переходить к строке.

P.S. Кстати, по условию в оригинале - строка она тоже не метод, там говорится о числах 1 .. 1010000, тут уж только посимвольное чтение, да и сумму надо сделать типа LongInt, с Integer-ом может быть переполнение:

var
ch: char;
curr, s: longint;

begin
curr := 1; s := 0;
while not eoln do begin
read(ch);
s := s + curr * (ord(ch) - ord('0'));
curr := - curr;
end;
if (s = 0) or (abs(s) mod 11 = 0) then writeln('yes')
else writeln('no');
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Как раз таки такое ограчение мне и требовалось!!!


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 5:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name