Форум программистов, компьютерный форум CyberForum.ru

разложить натуральное число на сумму 9ти квадратов - C++

Восстановить пароль Регистрация
 
G00CH
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 5
11.03.2012, 16:34     разложить натуральное число на сумму 9ти квадратов #1
Доброго времени суток. Решая олимпиадную задачу (о чем она можно догадаться в заголовке топика)
у меня всплыла проблема с разложением чисел от 2 до 8ми включительно и числа 10. Остальные числа раскладываются корректно. Помогите решить проблему вот код:
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
#include <iostream>
using namespace std;
 
int main()
{
  int n;
  int a=0,b,c,d,e,f,g,h,i;
  cin >> n;
  do{
    a++;
    b=0;
 do{
    b++;
    c=0;
  do{
    c++;
    d=0;
do{
    d++;
    e=0;
do{
    e++;
    f=0;
do{
    f++;
    g=0;
do{
    g++;
    h=0;
do{
    h++;
    i=-1;
    do{
      i++;
    }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(i<n));
  }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(h*h<n));
  }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(g*g<n));
  }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(f*f<n));
  }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(e*e<n));
  }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(d*d<n));  
  }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(c*c<n));
  }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(b*b<n));
  }while((a*a+b*b+c*c+d*d+e*e+f*f+g*g+h*h+i*i!=n)&&(a*a<n));
 
  cout << a <<" " << b<< " " << c << " " << d <<" " << e<<" " << f<<" " << g<< " " << h<< " " << i;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 16:34     разложить натуральное число на сумму 9ти квадратов
Посмотрите здесь:

C++ Дано натуральное число n. Найти все его делители и разложить его на простые числа.
C++ Дано натуральное число n. Можно ли представить его в виде суммы трех квадратов натуральных чисел?
Дано натуральное число n. -представить его как сумму квадратов C++
C++ Разложить число на сумму степеней двойки
Можно ли заданное натуральное число М представить в виде суммы квадратов двух натуральных чисел? C++
C++ Пол-ль вводит число от 50 до 100. Программа раскладывает число на сумму 4-х квадратов, всеми возможными способами
C++ натуральное число n представить в виде суммы трех полных квадратов
C++ Дано натуральное число N. Разложить его на простые множители

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Duha666
50 / 50 / 5
Регистрация: 10.03.2012
Сообщений: 138
11.03.2012, 16:42     разложить натуральное число на сумму 9ти квадратов #2
Рассмотрите случай, когда один из квадратов - 0
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
bool finish = false;
 
void get_answer(int n, int l)
{
    if (n <= 0)
        return;
    for (int i = 0; i * i <= n; i++)
        if (l == 1)
        {
            if (n - i * i == 0)
            {
                finish = true;
                cout << i << ' ';
                return;
            }
        }
        else
        {
            get_answer(n - i * i, l - 1)
            if (finish)
            {
                cout << i << ' ';
                return;
            }
        }
}
 
get_answer(n, 9); // разложение n на сумму 9 квадратов
G00CH
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 5
11.03.2012, 17:35  [ТС]     разложить натуральное число на сумму 9ти квадратов #3
всё исправил, сделал также разложения циклами токо на 4 числа а остальные 5 просто обозначил за 0.
спс за помощь
Yandex
Объявления
11.03.2012, 17:35     разложить натуральное число на сумму 9ти квадратов
Ответ Создать тему
Опции темы

Текущее время: 16:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru