Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
kiri11ka
0 / 0 / 1
Регистрация: 11.06.2017
Сообщений: 6
#1

Выяснить, можно ли представить данное число в виде суммы трех квадратов натуральных чисел - C++

11.06.2017, 19:23. Просмотров 290. Ответов 3
Метки нет (Все метки)

Дано натуральное число n. Можно ли представить его в виде суммы трех квадратов натуральных чисел? Если можно, то указать тройку x, y, z таких натуральных чисел, что n=x2+y2+z2 Помогите написать задачу на С++
http://www.cyberforum.ru/cpp-beginners/thread1715642.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2017, 19:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выяснить, можно ли представить данное число в виде суммы трех квадратов натуральных чисел (C++):

Дано натуральное число n. Можно ли представить его в виде суммы трех квадратов натуральных чисел?
Подскажите как правильно составить программу к этим задачам: 1.Дано...

Можно ли представить данное число в виде произведения трех последовательных натуральных чисел
Помогите пожалуйста решить задачи на С++ 2) (Функция) Дано натуральное число...

Определить, можно ли представить число в виде суммы двух квадратов натуральных чисел
Дано натуральное число n.Определить,можно ли представить его в виде суммы двух...

Определить, можно ли представить число N в виде суммы кубов трех натуральных чисел
Определить можно ли представить заданное натуральное число N как сумму кубов...

Можно ли заданное натуральное число М представить в виде суммы квадратов двух натуральных чисел?
Можно ли заданное натуральное число М представить в виде суммы квадратов двух...

3
fastb1t
196 / 135 / 76
Регистрация: 03.05.2017
Сообщений: 491
Завершенные тесты: 1
11.06.2017, 20:46 #2
Лучший ответ Сообщение было отмечено kiri11ka как решение

Решение

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 <iostream>
#include <cmath>
using namespace std;
 
const int MAX_ARRAY = 100;
int array [MAX_ARRAY];
 
void init_array ()
{
    for (int i = 1; i < MAX_ARRAY; i ++)
         array [i-1] = (i*i);
}
 
bool func (int n)
{
    for (int i1 = 0; i1 < MAX_ARRAY-1; i1 ++)
         for (int i2 = 0; i2 < MAX_ARRAY-1; i2 ++)
              for (int i3 = 0; i3 < MAX_ARRAY-1; i3 ++)
                   if (array [i1] + array [i2] + array [i3] == n)
                   {
                        cout << sqrt (array [i1]) << "^2 + " << sqrt (array [i2]) << "^2 + " << sqrt (array [i3]) << "^2 = " << n;
                        return 1;
                   }
    return 0;
}
 
int main (int argc, char *argv [])
{
    init_array ();
    // 9 + 16 + 25 = 50
    // 4 + 100 + 600 = 704
    int n = 704;
    if (!func (n))
         cout << "Error!";
    getchar ();
    return 0;
}
1
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
12.06.2017, 04:06 #3
Для произвольного числа слагаемых
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const int N=10000;
int a[N];
 
bool f(int n, int k, int j) {  
    if (k==0) return n==0; else if (n<a[j]) return false;
    for (int i=j; i<N; i++) {
        if (f(n-a[i], k-1, i)) {
            cout << (k==1 ? "" : " + ") << i << "^2";
            return true;
        }
    }
    return false;
}
 
int main() {
    for (int i=0; i<N; i++) a[i]=i*i;
    int n, k; cin >> n >> k;    
    if (f(n, k, 1)) cout << " = " << n; else cout << "no solution";
}
0
Sdettws
Заблокирован
12.06.2017, 22:11 #4
Для произвольного числа слагаемых. Без рекурсии. Задача олимпиадная. Имеет единственное решение для больших чисел.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 int count = 3; //число слагаемых x^2
    int limit = 100; //предел вычисления x^2+x^2+x^2=30000
    int value = 12; //заданное число для поиска
 
    int *length = new int[count] {};
    for (int k = 0; k < std::ceil(std::pow(limit, count)); k++) {
        for (int i = 0; i < count; i++) {
            length[i]++;
            if (length[i] > limit || length[i] == 1) length[i] = 1;
            else break;
        }
        if (value == std::inner_product(length, length + count, length, 0, std::plus<int>(), std::multiplies<int>())) {
            for (int c = 0; c < count; c++)cout << length[c] << ((c + 1 == count) ? "^2" : "^2+");
            return 0;
        }
    }
    delete[] length;
    cout << "no solution";
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2017, 22:11
Привет! Вот еще темы с решениями:

Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел.
Собственно само задание. 5). Даны натуральное число n. Среди чисел 1, 2, …,...

Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел
Даны натуральное число n. Среди чисел 1, 2, …, n найти все те, которые можно...

Среди чисел найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел
Дано натуральное число n. Среди чисел найти все те, которые можно представить в...

Среди чисел найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел
Помогите решить прогу плз. Условие: Дано натуральное число n. Среди чисел...


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

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

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