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

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

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

Дано целое положительное число N. Получить все представления этого числа суммой квадратов целых положительных чисел. Выдать сообщение, если это невозможно.

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

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2012, 18:31
Ответы с готовыми решениями:

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

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

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

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

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

33
Catstail
Модератор
23851 / 11907 / 2096
Регистрация: 12.02.2012
Сообщений: 19,355
09.07.2012, 09:07 2
В такой постановке - серьезная задача... По разложению на два квадрата - вот: разложить на сумму квадратов

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

Добавлено через 14 часов 23 минуты
"выдать сообщение если это невозможно" - а это всегда возможно, т.к. для любого N имеет место:
N=12+12+... +12 (N единиц)
1
olenenok
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
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
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
olenenok
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
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
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
olenenok
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 00:35  [ТС] 7
уф, короче это тупик=/ ничего не доходит сейчас, надо больше спать, но завтра сдавать =(
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,936
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
Catstail
Модератор
23851 / 11907 / 2096
Регистрация: 12.02.2012
Сообщений: 19,355
10.07.2012, 12:26 9
Вы сами-то этот код транслировали? Там же ошибки...
0
olenenok
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
Catstail
Модератор
23851 / 11907 / 2096
Регистрация: 12.02.2012
Сообщений: 19,355
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
Миниатюры
Получить все представления числа суммой квадратов целых положительных чисел  
olenenok
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 15:15  [ТС] 12
он то работающий, но после введения N, программа заканчивается
0
Catstail
Модератор
23851 / 11907 / 2096
Регистрация: 12.02.2012
Сообщений: 19,355
10.07.2012, 15:19 13
Какое N Вы вводили?
0
olenenok
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 15:22  [ТС] 14
ну вот перебробывала различные варианты 9,4,144, 89, 50
0
Catstail
Модератор
23851 / 11907 / 2096
Регистрация: 12.02.2012
Сообщений: 19,355
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
olenenok
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
Catstail
Модератор
23851 / 11907 / 2096
Регистрация: 12.02.2012
Сообщений: 19,355
10.07.2012, 15:43 17
В чём разница?
0
olenenok
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 15:45  [ТС] 18
getch();
0
Catstail
Модератор
23851 / 11907 / 2096
Регистрация: 12.02.2012
Сообщений: 19,355
10.07.2012, 15:48 19
А... Ну, понятно. Однако проблемы остаются. Я беру тайм-аут.
0
olenenok
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 21
10.07.2012, 21:36  [ТС] 20
препод сказал, что в этой проге лучше использовать true i false
0
10.07.2012, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2012, 21:36

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

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

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


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

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

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