![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Уважаемые форумчане-очень нужна ваша помощь в решении задачи по информатике(язык програмирования Delphi7).Задача состоит в следующем :найти минимальное число,которое представляется сумой 4 квадратов натуральных чисел не единственным образом!если несложно-покажите полный код программы.Заранее благодарен.
|
#2
|
|||
|
|||
![]() Полный код показать сложно, бо как готового нету.
Так что пробуем сами, выкладываем свои наработки и спрашиваем то, что не получается. Задача переборная, т.е. просто надо делать перебор всех вариантов. На первый взгляд - там 5 вложенных циклов: 4 для чисел и пятый для проверок. Когда вычисляешь результат, то его надо записывать в какой-нить массив, включая все исходные числа. Если такое число уже есть и исходные цифры, из которых оно образовалось, не совпадают - то вот твой ответ. Как построит циклы - подумай. |
#3
|
|||
|
|||
![]() Во.
Код:
type TResultSet = record Number : Integer; Src : Array [0..3] Of Integer; end; procedure TForm1.Button1Click(Sender: TObject); var Buf : TResultSet; AResultSet : Array Of TResultSet; S1, S2, S3, S4 : Integer; Iter : Integer; I, J : Integer; bFound : Boolean; iBuf : Integer; begin SetLength(AResultSet,0); Iter := 0; S1 := 1; While True Do Begin For S2 := 1 To S1 Do For S3 := 1 To S1 Do For S4 := 1 To S1 Do Begin Buf.Number := sqr(S1) + sqr(S2) + sqr(S3) + sqr(S4); Buf.Src[0] := S1; Buf.Src[1] := S2; Buf.Src[2] := S3; Buf.Src[3] := S4; For I := 0 To 2 Do For J := I+1 To 3 Do If Buf.Src[i] > Buf.Src[J] Then Begin iBuf := Buf.Src[i]; Buf.Src[i] := Buf.Src[J]; Buf.Src[J] := iBuf; End; bFound := False; For I := Low(AResultSet) To High(AResultSet) Do If (Buf.Number = AResultSet[i].Number) And ((Buf.Src[0] <> AResultSet[i].Src[0]) Or (Buf.Src[1] <> AResultSet[i].Src[1]) Or (Buf.Src[2] <> AResultSet[i].Src[2]) Or (Buf.Src[3] <> AResultSet[i].Src[3])) Then Begin ShowMessage(Format('Found:'#13#10'1: %d = %d + %d + %d + %d'#13#10'2: %d = %d + %d + %d + %d', [AResultSet[i].Number,AResultSet[i].Src[0],AResultSet[i].Src[1],AResultSet[i].Src[2],AResultSet[i].Src[3], Buf.Number,Buf.Src[0],Buf.Src[1],Buf.Src[2],Buf.Src[3]])); Exit; End Else If (Buf.Number = AResultSet[i].Number) Then Begin bFound := True; Break; End; If Not bFound Then Begin SetLength(AResultSet,Length(AResultSet)+1); AresultSet[High(AResultSet)] := Buf; End; End; Inc(S1); Inc(Iter); If Iter > 1000 Then Begin ShowMessage('Not found.'); Exit; End; End; end; Код немного страшный, зато работает. |
#4
|
||||
|
||||
![]() Какая тема будет следующей?
найти минимальное число,которое представляется сумой 8 квадратов натуральных чисел? Посмотрел ради интереса в гугле: полно теории, рефератов, примеров решения, теорем и т.д. ТС не удосужился даже в гугль зайти ![]() |
#5
|
|||
|
|||
![]() Да мне было просто интересно саму программу написать.
Задачка довольно интересная. Хотя, догадываюсь, что решение мягко говоря не оптимальное. |