Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.06.2011, 22:38
Dima170792 Dima170792 вне форума
Новичок
 
Регистрация: 02.04.2011
Сообщения: 61
Репутация: 10
По умолчанию найти минимальное число,которое представляется сумой 4 квадратов натуральных чисел не

Уважаемые форумчане-очень нужна ваша помощь в решении задачи по информатике(язык програмирования Delphi7).Задача состоит в следующем :найти минимальное число,которое представляется сумой 4 квадратов натуральных чисел не единственным образом!если несложно-покажите полный код программы.Заранее благодарен.
Ответить с цитированием
  #2  
Старый 23.06.2011, 22:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Полный код показать сложно, бо как готового нету.
Так что пробуем сами, выкладываем свои наработки и спрашиваем то, что не получается.

Задача переборная, т.е. просто надо делать перебор всех вариантов.
На первый взгляд - там 5 вложенных циклов: 4 для чисел и пятый для проверок. Когда вычисляешь результат, то его надо записывать в какой-нить массив, включая все исходные числа. Если такое число уже есть и исходные цифры, из которых оно образовалось, не совпадают - то вот твой ответ. Как построит циклы - подумай.
Ответить с цитированием
  #3  
Старый 23.06.2011, 23:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Во.

Код:
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  
Старый 23.06.2011, 23:50
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Какая тема будет следующей?

найти минимальное число,которое представляется сумой 8 квадратов натуральных чисел?

Посмотрел ради интереса в гугле: полно теории, рефератов, примеров решения, теорем и т.д.

ТС не удосужился даже в гугль зайти
Ответить с цитированием
  #5  
Старый 24.06.2011, 04:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да мне было просто интересно саму программу написать.
Задачка довольно интересная. Хотя, догадываюсь, что решение мягко говоря не оптимальное.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025