Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Олимпиадная задача: про билеты.

Автор: AND 1.10.2008 21:17

Думаю, всем известная задача про счастливые 6-значные билеты. Занимаюсь паскалем пару дней) так что делел на основе "имеющихся знаний". Вроде как сделал, да только 1 пункт не знаю как сделать - размещать ответы в 2 столбика + можно ли что бы они были ВСЕ? Желатьно сделать простыми средствами.

Цитата
PROGRAM p;
VAR
pr1, pr2, i, n1, n2, n : longint;
BEGIN
n:=0;
Write('Ot... ');
Readln(pr1);
Write('Do... ');
Readln(pr2);
while (pr1=pr2) or (pr1>pr2) or (pr1<0)
do Write('Error!!!');

for i:=pr1 to pr2 do
begin
n1:=(i div 1000);
n2:=(i mod 1000);
if
(n1 div 10)-(n1 div 100)*9+(n1 mod 10)=
(n2 div 10)-(n2 div 100)*9+(n2 mod 10)
then
begin
Writeln(i);
n:=n+1
end;
end;
writeln(n);
read(n)
end.

Автор: volvo 1.10.2008 21:48

Цитата
размещать ответы в 2 столбика
довольно просто:

if
(n1 div 10)-(n1 div 100)*9+(n1 mod 10) =
(n2 div 10)-(n2 div 100)*9+(n2 mod 10)
then begin
Write(i:10); { <-- изменить здесь }
if n mod 2 = 0 then writeln; { <--- и добавить вот эту строку }
n:=n+1
end;


Цитата
+ можно ли что бы они были ВСЕ?
Все на экране одновременно? Ну, вот смотри: ввел я от 111111 до 222222, получил список из 5802 шестизначных чисел. Это получается 34812 символов... Всего на одну строку текстового экрана помещается 80 символов. Простое арифметическое действие показывает, что даже если не печатать пробелы между числами, на это потребуется 435 строк... А у тебя в наличии всего 25 (или 50 - в лучшем случае).

Выводи список в файл.

Автор: AND 1.10.2008 22:16

Цитата
Write(i:10); { <-- изменить здесь }
if i mod 2 = 0 then writeln; { <--- и добавить вот эту строку }

Спасибо, а не моглибы объямничь, что это значит))?

Автор: volvo 1.10.2008 22:22

{
Печатаем число в поле из 10 символов (4 пробела и 6 - само число, оно же шестизначное)
}
Write(i:10);

{
Переводим строку, только если N - четное (остаток от деления на 2 = 0),
а поскольку четный номер - у каждого второго числа, то после вывода двух чисел
строка и переведется
}
if n mod 2 = 0 then writeln;

Автор: AND 2.10.2008 1:24

Цитата(volvo @ 1.10.2008 19:22) *

{
Печатаем число в поле из 10 символов (4 пробела и 6 - само число, оно же шестизначное)
}
Write(i:10);

{
Переводим строку, только если i - четное (остаток от деления на 2 = 0),
а поскольку четным является каждое второе число, то после вывода двух чисел
строка и переведется
}
if i mod 2 = 0 then writeln;



Нет. Не получается. Там могут идти ПОДРЯТ и четные или нечетные. Иногда (часто) получается по 3 или 4 числа в строке.

Автор: volvo 2.10.2008 1:40

Упс... Я там по ошибке поставил i... Надо проверять N, естественно - то есть четность/нечетность порядкового номера числа... Исправил предыдущие посты...

Автор: AND 2.10.2008 11:01

Цитата(volvo @ 1.10.2008 22:40) *

Упс... Я там по ошибке поставил i... Надо проверять N, естественно - то есть четность/нечетность порядкового номера числа... Исправил предыдущие посты...

Ок. Сам понял, всё работает.