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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2010, 20:27   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Невырожденные треугольники

Собственно, решал задачку(код паскалевский):
Цитата:
Найти количество различных невырожденных треугольников таких, что их периметр равен N.
Вот, решил.
Однако, например, если задать периметр 9, то прога выдаёт 4, однако должно 3. Смотрел ответы, которые выдаёт прога - там есть два одинаковых, она их считает за один, и это меня раздражает.
Вот мой код, однако не смотрите на то, что он ужасно некрасивый и нерациональный, писал "на скорую ручку, комком да в кучку",помогите что исправить:
Код:
Uses CRT;
Function Sort(S:String):String;
Var
   T:String;
   B:Char;
   I,J:Integer;
Begin
     T:=S;
     For i:=1 To 2 Do
     Begin
          For J:=I+1 To 3 Do
          Begin
               If T[i]>T[j] Then
               Begin
                    B:=T[i];
                    T[i]:=T[j];
                    T[j]:=B;
               End;
          End;
     End;
     Sort:=T;
End;
Function IsYes(A,B,C:Integer):Boolean;
Begin
     If (A<B+C) and (B<A+C) and (C<A+B) Then
     IsYes:=True
     Else IsYes:=False;
End;
Function IntToStr(A:Integer):String;
Var
   S:String;
Begin
     Str(A,S);
     IntToStr:=S;
End;
Var
   Trias:array[1..100] of String[3];
   P,R:Integer;
   I,J,K,q,N:Integer;
   S:String;
   M:Integer;
Begin
     Clrscr;
     Writeln('Enter P:');
     Readln(P);
     N:=0;
     S:='';
     If P mod 2 = 0 Then Q:=P div 2 - 1
     Else Q:=P div 2;
     For I:=1 To Q Do
     Begin
          For J:=P-I-1 DownTo 1 Do
          Begin
               K:=P-I-J;
               If IsYes(I,J,K) Then
               Begin
                    Inc(N);
                    S:=Sort(IntToStr(I)+IntToStr(J)+IntToStr(K));
                    Trias[N]:=S;
               End;
          End;
     End;
     Writeln(N);
     Readln;
End.
Только прога чуть не доработана, при периметре 9 выдаст 10, т.к.нет процедуры удаления одинаковых элементов.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на паскале про треугольники pashqa Помощь студентам 2 09.12.2010 21:03
Равнобедренные треугольники endiny Общие вопросы C/C++ 1 28.10.2010 18:23
треугольники в Delphi HelpMePLZ Помощь студентам 0 20.06.2010 23:50
Про треугольники Артём555 Паскаль, Turbo Pascal, PascalABC.NET 7 28.04.2010 13:41
Треугольники Prowler Помощь студентам 3 15.05.2007 07:06