Помощь - Поиск - Пользователи - Календарь
Полная версия: Прямоугольный треугольник
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Anya
Дано прямоугольный треугольник (его два катета) размером до 2-х миллиардов.
Определить сколько единичных квадратиков может в них поместиться.
Спасибо за внимание,
Аня
klem4
Можно так попробоват :
Код
{$n+}
uses crt;
var a,b:longint;
   s:extended;
Begin
  clrscr;
  readln(a,b);
  s:=a*b/2;
  writeln('s=',s:2:3);
  readln;
end.
volvo
Цитата(Anya @ 22.02.05 15:08)
размером до 2-х миллиардов.

Это намек на то, что без длинночисленной арифметики не обойтись? huh.gif
Altair
цель найти площадь...
соль задачи в использовании длинной арифметики.
Все есть в FAQ'e
klem4
хехе чо-то я про 2000000000 не подумал smile.gif)))

a=1999999999,b=2000000000 все ок.
Altair
а я тоже не понял сначала, я не вьехал сначала в каких единицах (перерешал зада по физике) smile.gif
volvo намекнул smile.gif
volvo
Цитата(klem4 @ 22.02.05 15:29)
a=1999999999,b=2000000000 все ок.

Понимаешь, klem4, в задаче спрашивалось, сколько целых единичных квадратов могут поместиться в треугольнике. По твоему методу при a=200000 и b=1 какой ответ будет? А правильный ответ: 0, потому что нельзя засунуть в этот треугольник ни одного единичного квадрата... ;)
klem4
Да, точно, а у меня просто нахождение площади.

Тогда решение через массив с помощью длинночисленной арифметики.
Altair
Какой массив? ;)
klem4
Уж не знаю что там получится с дл арифметикой,еще с ней не работал, но мне кажется дальше для нахождения максимального числа целых квадратов решить можно через массив,
я так понял, что это будет кол-во элементов находящихся ниже(выше) главной диагонали...например

Цитата
10000
01000
00100
00010
00001


Ну по крайней мере если нарисовать на бумаге в клетку так оно и есть smile.gif))))
klem4
Нет, я опять не прав sad.gif((((
Надо подумать еще..
Михаил Густокашин
вот. в форуме не писал - все 25 раз проверил. только у меня Паскаля нет.
Код

var
 a, b, i : longint;
 sum, tmp : extended;
begin
 read(a, b);
 sum := 0;
 for i := 1 to a-1 do begin
   tmp := i;
   tmp := (tmp/a)*b;
   sum := sum + trunc(tmp);
 end;
 writeln(sum:0:0);
end.
Altair
Цитата
за баги не пинать - пишу прямо в форуме):

А правила приличия вам знакомы?
читаем правила форума
Цитата
8. Проверяйте программы перед тем, как запостить их!!

А вдруг ошибка?
Altair
Михаил, а ваша программа-то не правильная...
рассмотрим случай когда стороны одна N другая 1.
в такой треугольник не влезет ни одного единичного квадрата....
а ваша программа дает результат 1.... ;)
Михаил Густокашин
Цитата(Oleg_Z @ 22.02.05 18:42)
Михаил, а ваша программа-то не правильная...
рассмотрим случай когда стороны одна N другая 1.
в такой треугольник не влезет ни одного единичного квадрата....
а ваша программа дает результат 1.... ;)

спасибо. сейчас исправлю.
Altair
offtop
ок. пожалуйста, в следующий раз все-таки не нарушайте правила...
они для всех одинаковые.
Altair
Цитата
только у меня Паскаля нет.

а что вы на форуме "Все о Паскале" делаете без Паскаля ?
Михаил Густокашин
Цитата(Oleg_Z @ 22.02.05 18:59)
а что вы на форуме "Все о Паскале" делаете без Паскаля ?

я помогаю решить задачи, которые другие участники форума решить не могут. к сожалению, у вас принята система, что словестное описание решения недопустимо на этом форуме, поэтому приходится излагать мысли на паскале, который не мой родной язык.
klem4
Кстати ваша программа зависает при a,b=2000000000.(
volvo
Цитата(Михаил Густокашин @ 23.02.05 1:27)
я помогаю решить задачи, которые другие участники форума решить не могут.

Ну и как это понимать? angry.gif Что же творилось на форуме, пока Вы не сделали нам одолжение и не начали решать задачи... Мы все сидели и ждали, когда же наконец придет Михаил Густокашин из ВМиК МГУ и научит нас, как все-таки задачи-то решать... Тем более на "не родном" языке... Ого, что же Вы тогда можете на _родном_ - то писать, страшно подумать... blink.gif

Только вот... Родной язык, я полагаю, у Вас русский? Извините, но...
Цитата(Михаил Густокашин @ 23.02.05 1:27)
я помогаю решить задачи, которые другие участники форума решить не могут. к сожалению, у вас принята система, что словестное описание решения недопустимо на этом форуме, поэтому приходится излагать мысли на паскале, который не мой родной язык.

... и это Родной Язык ...
Михаил Густокашин
вот несколько оптимизированная, но по-прежнему правильно работающая программа. просто цикл до 2'000'000'000 со сложением чисел с плавающей точкой - долгая процедура. по идее, extended хранит 19-20 десятичных знаков, а значит и результат для максимального теста влезет в него.
Код

{$A+,B-,D+,E-,F-,G+,I-,L+,N+,O-,P-,Q-,R-,S-,T-,V-,X+,Y-}
{$M 64000,0,655360}

var
i, b : longint;
sm, sum, a : extended;
begin
read(a, b);
sum := 0;
sm := a/b;
for i := b downto 1 do begin
  a := a - sm;
  sum := sum + trunc(a);
end;
writeln(sum:0:0);
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.