Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
1

Получить все представления числа суммой квадратов целых положительных чисел

08.07.2012, 18:31. Показов 3107. Ответов 33
Метки нет (Все метки)

Дано целое положительное число N. Получить все представления этого числа суммой квадратов целых положительных чисел. Выдать сообщение, если это невозможно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2012, 18:31
Ответы с готовыми решениями:

Вывести все представления заданного натурального числа суммой натуральных чисел
Задача: Вывести все представления натурального числа N суммой натуральных чисел. Пример: Ввод:...

Заданы массивы целых чисел X(n) и Y(n). Все числа, с нечётной суммой цифр, переписать в массив Z
Заданы массивы целых чисел X(n) и Y(n) . Все числа, с нечётной суммой цифр, переписать в массив Z...

Даны два целых числа А и В (А<В). Найти сумму квадратов всех целых чисел от А до В включительно
Даны два целых числа А и В (А&lt;В). Найти сумму квадратов всех целых чисел от А до В включительно.

Найти количество квадратов в наборе из 10 целых положительных чисел
Описать функцию IsSquare(K) логического типа, возвращающую True, если целый параметр K (&gt; 0)...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
33
Модератор
Эксперт Python
28558 / 15428 / 3047
Регистрация: 12.02.2012
Сообщений: 25,282
Записей в блоге: 4
09.07.2012, 09:07 2
В такой постановке - серьезная задача... По разложению на два квадрата - вот: разложить на сумму квадратов

Кроме того, есть теорема Лагранжа о том, что всякое целое можно представить в виде суммы 4-х квадратов.

Добавлено через 14 часов 23 минуты
"выдать сообщение если это невозможно" - а это всегда возможно, т.к. для любого N имеет место:
N=12+12+... +12 (N единиц)
1
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 00:10  [ТС] 3
программа выдаёт ошибки, как исправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <windows.h>
 
 
void main()
{
 
 
long a,b;
    int k;
 
clrscr();
 
puts("vvedite 4islo A=");
 
while (a>0);
printf("Razlozhenie na summu kvadratov:");
k=0;
for(b=1;b<(a%2);b++)
if (modf(sqrt(b))=0)and(modf(sqrt(a-b))=0)then
 begin
  k=1;
  printf("b,'+',a-b");
 end;
if k=0 then printf("Nevozmozhno");
 
end.
0
Модератор
Эксперт по электронике
8380 / 6225 / 836
Регистрация: 14.02.2011
Сообщений: 21,605
10.07.2012, 00:23 4
Цитата Сообщение от olenenok Посмотреть сообщение
for(b=1;b<(a%2);b++)
как ты думаешь цикл хоть раз выполнится ???
a%2 даст 1 при нечетном и 0 при четном в любом случае b<(a%2) не выполнится

Цитата Сообщение от olenenok Посмотреть сообщение
begin
k=1;
printf("b,'+',a-b");
end;
А это что за народное(паскалевское) творчество в программе на С???
я бы делал так
если n=1 выход не возможно
иначе
1 цикл от 1 до n/2
2 если квадрат переменной больше n то выходим из цикла
3 берем предыдушее значение возводим в квадрат вычитаем из n(если при первом проходе получится 0 то еще предыдушнее)
к 1 до тех пор пока n не равно 0

вложеный цикл
0
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 00:26  [ТС] 5
да уже просто мозги варятся, вот и паскальное народное творчество в си.
if (modf(sqrt(b))=0)and(modf(sqrt(a-b))=0)then вот эта строчка не по душе программе
0
Модератор
Эксперт по электронике
8380 / 6225 / 836
Регистрация: 14.02.2011
Сообщений: 21,605
10.07.2012, 00:28 6
Цитата Сообщение от Catstail Посмотреть сообщение
Кроме того, есть теорема Лагранжа о том, что всякое целое можно представить в виде суммы 4-х квадратов.
всякое-всякое ??? 1 2 3 как сделать суммой четырех квадратов

Добавлено через 1 минуту
Цитата Сообщение от olenenok Посмотреть сообщение
if (modf(sqrt(b))=0)and(modf(sqrt(a-b))=0)then
правильно then -чего такое
и чего ты этой строкой хотел выразить???
0
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 00:35  [ТС] 7
уф, короче это тупик=/ ничего не доходит сейчас, надо больше спать, но завтра сдавать =(
0
Модератор
Эксперт по электронике
8380 / 6225 / 836
Регистрация: 14.02.2011
Сообщений: 21,605
10.07.2012, 01:02 8
господя.... Я же тебе все расписал
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
int Main()
{
 int N;
 int flag=0; 
int i;
 scanf("%i",%N);
 if (N==1)
  {
    printf("Error");
    return 0;   
 }
    printf("%d="N);
 while(N!=0)
   {
     for(i=0;i<N;i++)
        if(i*i>N) 
          break;
     if(flag==0 &&((i-1)*(i-1)==N))      
        {
          N=N-(i-2)*(i-2);
          printf("%d",i-2);
         }
     else
         {
          N=N-(i-1)*(i-1);
          printf("%d",i);
          }
       if(flag!=0)
         printf("+");
      
   flag++; 
   }
    printf("\n");
   system("pause");
 return 0;
}
1
Модератор
Эксперт Python
28558 / 15428 / 3047
Регистрация: 12.02.2012
Сообщений: 25,282
Записей в блоге: 4
10.07.2012, 12:26 9
Вы сами-то этот код транслировали? Там же ошибки...
0
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 14:45  [ТС] 10
вот да, выдаёт ошибки проги всё равно=(

Добавлено через 30 минут
вот что это за ошибка? Unresolved external '_main' referenced from C:\BC5\LIB\COX32.OBJ
0
Модератор
Эксперт Python
28558 / 15428 / 3047
Регистрация: 12.02.2012
Сообщений: 25,282
Записей в блоге: 4
10.07.2012, 15:10 11
Вот работающий код... Небезупречный, но работающий:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "iostream.h"
#include "math.h"
 
int main(int argc, char* argv[])
{
    int k,i,j,q,n,N,Z;
    int *A,*S;
 
    cout << "N=";
    cin >> N;
 
    n=(int)sqrt(N)+1;
 
    S=new int[n];
 
    for (i=0; i< n; i++) S[i]=i*i;
 
    for (k=2; k<=n; k++)
    {
 
        // Здесь строятся все сочетания по к чисел из n 
 
        A=new int[k];
 
        for (i=0; i<k; i++) A[i]=i;
 
             while (1)
            {
 
               // проверка очередного сочетания
 
                   Z=0;
                  for (i=0; i<k; i++)
                  {
                     j=A[i];
                     Z=Z+S[j];
                  }
 
                   // если это - разложение...
 
                  if (Z == N)
                  {
                           // Очень стыдно! Отбрасываем разложения,
                           // в которых есть нуль 
 
                     q=0;
                     for (i=0; i<k; i++) 
                          if (S[A[i]]==0)
                            {
                               q=-1;
                               break;
                            }
                            if (q == 0)
                            {
                                for (i=0; i<k; i++)
                                    cout << S[A[i]] << " ";
                                cout << endl;
                            }
                  }
 
                  q=0;
 
                  for (j=k-1; j>=0; j--)
                       if (A[j] != (n-k+j))
                          {
                             q=-1;
                             A[j]++;
                             for (i=j+1; i<k; i++) A[i]=A[i-1]+1;
                             break;
                          }
 
                  if (q == 0) break;
 
              }
 
        }
 
        delete [] A;
        delete [] S;
 
        return 0;
 
}
1
Миниатюры
Получить все представления числа суммой квадратов целых положительных чисел  
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 15:15  [ТС] 12
он то работающий, но после введения N, программа заканчивается
0
Модератор
Эксперт Python
28558 / 15428 / 3047
Регистрация: 12.02.2012
Сообщений: 25,282
Записей в блоге: 4
10.07.2012, 15:19 13
Какое N Вы вводили?
0
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 15:22  [ТС] 14
ну вот перебробывала различные варианты 9,4,144, 89, 50
0
Модератор
Эксперт Python
28558 / 15428 / 3047
Регистрация: 12.02.2012
Сообщений: 25,282
Записей в блоге: 4
10.07.2012, 15:34 15
Да, есть проблема. Программа строит разложение в различные суммы квадратов, а надо - во всякие. Кроме того, есть проблема при малых числах (9,4). А вот разложения 50 и др. у меня строятся: 50 = {(1,49),(9,16,25),(1,4,9,36)}; 144=(1,4,9,49,81). Буду думать.
0
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 15:38  [ТС] 16
вот так она работает:
#include "iostream.h"
#include "math.h"
#include <conio.h>
int main(int argc, char* argv[])
{
int k,i,j,q,n,N,Z;
int *A,*S;

cout << "N=";
cin >> N;

n=(int)sqrt(N)+1;

S=new int[n];

for (i=0; i< n; i++) S[i]=i*i;

for (k=2; k<=n; k++)
{

A=new int[k];

for (i=0; i<k; i++) A[i]=i;

while (1)
{

Z=0;
for (i=0; i<k; i++)
{
j=A[i];
Z=Z+S[j];
}
if (Z == N)
{
q=0;
for (i=0; i<k; i++)
if (S[A[i]]==0)
{
q=-1;
break;
}
if (q == 0)
{
for (i=0; i<k; i++)
cout << S[A[i]] << " ";
cout << endl;
}
}

q=0;

for (j=k-1; j>=0; j--)
if (A[j] != (n-k+j))
{
q=-1;
A[j]++;
for (i=j+1; i<k; i++) A[i]=A[i-1]+1;
break;
}
if (q == 0) break;
}
}

delete [] A;
delete [] S;
getch();
return 0;
}
0
Модератор
Эксперт Python
28558 / 15428 / 3047
Регистрация: 12.02.2012
Сообщений: 25,282
Записей в блоге: 4
10.07.2012, 15:43 17
В чём разница?
0
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 15:45  [ТС] 18
getch();
0
Модератор
Эксперт Python
28558 / 15428 / 3047
Регистрация: 12.02.2012
Сообщений: 25,282
Записей в блоге: 4
10.07.2012, 15:48 19
А... Ну, понятно. Однако проблемы остаются. Я беру тайм-аут.
0
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 21:36  [ТС] 20
препод сказал, что в этой проге лучше использовать true i false
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2012, 21:36

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Вывести таблицу квадратов первых десяти целых положительных чисел
Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел.

Вывести таблицу квадратов первых десяти целых положительных чисел
Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел. Ниже...

Задан массив K(m) попарно различных целых чисел. Получить все перестановки целых чисел
Помогите пожалуйста с программой. Задан массив K(m) попарно различных целых чисел. Получить все...

Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел
Ребят, выручайте) Написать программу, которая выводит таблицу квадратов первых десяти целых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.