Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 0
Регистрация: 04.10.2022
Сообщений: 21

Дано натуральное число N. Определить, если это возможно, пару x,y таких натуральных чисел, что N = x^2+y^2

13.01.2023, 12:39. Показов 1750. Ответов 20

Студворк — интернет-сервис помощи студентам
Дано натуральное число N. Определить, если это возможно, пару x,y таких натуральных чисел, что N = x^2+y^2

Code
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
// Функция которая возвращает такие значения x и y, которые x^2+y^2 = num 
int coupleXY(int num)
{
    int x = 0;
    int y = 0;
    
    while((pow(x,2) + pow(y,2)) == num)
    {
        while(y<num)
        {
        if( (pow(x,2) + pow(y,2)) == num )
            {
            return x,y;
            }
        y++;
        }
 
    x++;
    }
 
    // return x,y;  
}
 
// Главная функция, принимает N, и вызывает функцию, выводя её результат
int main()
{
    int N, resultX, resultY;
    
    cout << "Set natural number N: ";
    cin >> N;
    resultX, resultY = coupleXY(N);
    cout<<"\nx^2+y^2 = N, if "<<endl;
    cout<<"x = "<<resultX<<endl;
    cout<<"y = "<<resultY<<endl;
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2023, 12:39
Ответы с готовыми решениями:

Дано натуральное число N. Указать пару х, у таких натуральных чисел, что N = х 2 + у 2
Дано натуральное число N. Можно ли представить его в виде суммы двух квадратов натуральных чисел? Если можно, то указать пару х, у таких ...

Дано натуральное число n и массив вещественных чисел а[1..n]. Определить число m, что встречается в массиве наиболее часто. Если в массиве несколько
Дано натуральное число n и массив вещественных чисел а. Определить число m, что встречается в массиве наиболее часто. Если в массиве...

Найти пару натуральных чисел таких, что
Дано 91 натуральное число, от 1 до 91. Найти из этих чисел такую пару, что их произведение равно сумме всех остальных чисел. (ответ:...

20
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
13.01.2023, 13:32
вы изобретаете какой-то свой язык, явно не С++
"return два значения через запятую" так делать нельзя, вы такое не могли прочесть ни в одном учебнике.
да и сам алгоритм с циклами while неправильный
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
13.01.2023, 14:23
Я бы добавил, что использование вещественной функции pow, да еще и проверка на равенство double-чисел - не просто плохой тон, а чудовищный

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool coupleXY(int num, int *x, int *y)
{ int xx, yy;
    for(xx=1 ; xx*xx < num; xx++) {
        for( yy=1; x*x+y*y <=num; yy++) {
          if  (xx*xx + yy*yy == num )    {
            *x = xx:
            *y = yy;
            return true;
          }
       }
    }
    return false;  
}
Добавлено через 8 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
return два значения через запятую" так делать нельзя, вы такое не могли прочесть ни в одном учебнике.
Не будем судить строго. ТС же в смущении закомментировал этот return. А как вернуть пару значений через указатели - этого еще не умеет. Или передать параметры по ссылке. Но лично я считаю, что сначала надо понять передачу по значения и через указатели. Ибо передача по ссылке, это почти тоже самое.

Не по теме:

ЗЫ. Лично мое мнение. Кто-то может думать и иначе.

0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
13.01.2023, 14:59
kakuro, предлагаю алгоритм:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
int main()
{
    int N;
    std::cout << "N = "; std::cin >> N;
    for (int x = 1; x * x <= N; x++)
        for (int y = 1; y * y <= N; y++)
            if (x * x + y * y == N)
                std::cout << "x = " << x << "; y = " << y << std::endl;
    return 0;
}
И тест:
Code
1
2
3
N = 25
x = 3; y = 4
x = 4; y = 3
Добавлено через 21 минуту
И как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iterator>
#include <map>
std::map<size_t, size_t> coupleXY(size_t N)
{
    std::map<size_t, size_t> res;
    for (size_t x = 1; x * x <= N; x++)
        for (size_t y = 1; y * y <= N; y++)
            if (x * x + y * y == N) 
                res.insert(std::pair<size_t, size_t>(x, y));
    return res;
}
int main()
{
    size_t N;
    std::cout << "N = "; std::cin >> N;
    std::map<size_t, size_t> res = coupleXY(N);
    for (std::map<size_t, size_t>::iterator itr= res.begin(); itr != res.end(); itr++)
    std::cout << "x = " << itr->first << "; y = " << itr->second << std::endl;
    return 0;
}
0
Заблокирован
13.01.2023, 16:38
Цитата Сообщение от Байт Посмотреть сообщение
ТС же в смущении закомментировал этот return.
Один из них

Добавлено через 44 секунды
Цитата Сообщение от kakuro Посмотреть сообщение
resultX, resultY = coupleXY(N);
И плюс это, ммде, такой код еще нужно поискать.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
13.01.2023, 17:09
Цитата Сообщение от Volga_ Посмотреть сообщение
предлагаю алгоритм:
Скорее всего, ТС дана эта задача на обращение с функциями. Хотя и алгоритм у него тоже дурной.

Добавлено через 18 минут
Можно еще и так
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
typedef struct (
  imt x, y;
} XY;
XY coupleXY(int num)
{ XY xy;
    for(xy.x=1 ; xy.x*xy.x < num; xy.x++) {
        for( xy.y=xy.x; xy.x*xy.x+xy.y*xy.y <=num; xy.y++) {
          if  (xy.x*xy.x + xy.y*xy.y == num )    {
            return xy;
          }
       }
    }
    xy.x = xy.y= 0; 
    return r;  
}
int main()
{
    int N, XY result;
    
    cout << "Set natural number N: ";
    cin >> N;
    resultY = coupleXY(N);
    cout<<"\nx^2+y^2 = N "<<endl;
    cout<<"x = "<<result.x<<endl;
    cout<<"y = "<<result.y<<endl;
    return 0;
}
Если нигде не запутался...

Добавлено через 4 минуты
Неудачно обозвал...
C++
1
2
3
4
5
6
7
8
9
10
11
12
XY coupleXY(int num)
{ XY r;
    for(r.x=1 ; r.x*r.x < num; r.x++) {
        for( r.y=r.x; r.x*r.x+xy.y*r.y <=num; r.y++) {
          if  (r.x*r.x + r.y*r.y == num )    {
            return r;
          }
       }
    }
    r.x = r.y= 0; 
    return r;  
}
1
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
13.01.2023, 21:14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int main(){
    int n, m = 1;
 
    cin >> n;
    while (m * m + (m*m - 1) / 2 * (m*m - 1) / 2 <= n) {
        if (m * m + (m*m - 1) / 2 * (m*m - 1) / 2 == n) {
            cout << m << "  " << (m*m - 1) / 2;
            return 0;
        }
        m++;
    }
    cout << "no";
}
Добавлено через 1 минуту
Volga_, а если N=1?
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
14.01.2023, 10:11
В диапазоне 20-40:

C++ (Qt)
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
    int x, y;
    bool b;
    QString str, str1, str2;
 
    for(int N = 20; N < 41; N++)
    {
        b = false;
        str = QString::number(N);
 
        for(x = 1; x*x < N; x++)
            for(y = 1; y*y < N; y++)
            {
                if((x*x + y*y) == N)
                    {b = true; goto met_10;}
            }
 
met_10:
        if(b)
        {
            str1 = QString::number(x);
            str2 = QString::number(y);
 
            str += " = " + str1 + " * " + str1 +
                    " + " + str2 + " * " + str2;
        }
 
        ui->textEdit->append(str);
    }
Миниатюры
Дано натуральное число N. Определить, если это возможно, пару x,y таких натуральных чисел, что N = x^2+y^2  
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6131 / 2826 / 1038
Регистрация: 01.06.2021
Сообщений: 10,307
14.01.2023, 11:56
Добавлю, что в этой задаче математика позволяет сразу ответить на вопрос, существует ли такая пара для того или иного числа N. Но для такой проверки как минимум нужно потратить O(sqrt(n)), а если сильно потрудиться, то можно и O(log(n)).
0
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
14.01.2023, 16:32
C++
1
2
        for(x = 1; x*x < N; x++)
            for(y = 1; y*y < N; y++)
не понял зачем столько переборов, да и перебирать достаточно до корня из N

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
#include <iostream>
#include <cmath>
 
uint8_t decompose(const uint64_t n, uint32_t& a, uint32_t& b)
{
   for (uint32_t i=1;i<sqrt(n);i++)
    {
     double _t(sqrt(n-i*i));
     if (_t==int(_t)) {
        a = i;
        b = int(_t);
        return 1;
     }
    }
    return 0;
}
int main()
{
    uint32_t a,b;
    for (uint64_t n=1; n<100; n++)
    if (decompose(n,a,b))
        std::cout<<n<<" = "<<a<<"^2 + "<<b<<"^2"<<std::endl;
 
    return 0;
}

C++
1
{b = true; goto met_10;}
goto ))) goto в C++ как тебе такое илон маск
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
14.01.2023, 16:46
abit, вы не знаете, что в самой функции sqrt() включают циклы ?
0
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
14.01.2023, 16:58
Volga_,
вовсе не обязательно, зависит от целевой платформы
но даже на простеньких cortex-m это цикл из 3-4 итераций для достаточно больших чисел, можете в этом убедиться самостоятельно реализовав метод Ньютона
x0 = in/2 [initial guess]
x1 = 1/2 * ( x0 + in / x0) [each iteration]
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
14.01.2023, 17:08
Цитата Сообщение от abit Посмотреть сообщение
goto ))) goto в C++ как тебе такое илон маск
Самый простой способ выйти из вложенных циклов. И тем самым прекратить "лишние" вычисления.
0
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
14.01.2023, 17:11
ну ладно, из 10 итераций)

Добавлено через 1 минуту
Самый простой способ выйти из вложенных циклов. И тем самым прекратить "лишние" вычисления.
эти способы часто плохо заканчиваются потом
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
14.01.2023, 17:22
Чё, оператор goto лажает? Не всегда правильно выполняется?
0
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
14.01.2023, 17:33
Ой, там много проблем, поговаривают затрудняет чтение кода человеком, при некоторых переходах можно потерять контекст, да и компилятору такой код оптимизировать затруднительно, в общем это моветон, использовать только если совсем без него... сейчас во многих фирмах ругаются если ты вместо стандартного паттерна проектирования решил сделать свой с блекджеком, исключив лишнее ради скорости, а тут целый goto
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
14.01.2023, 17:40
Цитата Сообщение от abit Посмотреть сообщение
сейчас во многих фирмах ругаются если ты вместо стандартного паттерна проектирования решил сделать свой с блекджеком, исключив лишнее ради скорости
Не поэтому ли раньше неплохие игры умещались на одной-двух-трёх дискетах, и запускались на скромных компах, а сейчас требуются гигабайты и гигагерцы?
0
 Аватар для abit
868 / 527 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
14.01.2023, 17:46
Цитата Сообщение от alexu_007 Посмотреть сообщение
Не поэтому ли раньше неплохие игры умещались на одной-двух-трёх дискетах, и запускались на скромных компах, а сейчас требуются гигабайты и гигагерцы?
в том числе поэтому, но тут вопрос расширяемости, если один-два человека работает над кодом, есть договорённость в стиле, то оно, конечно, запустится и заработает, вопрос смогут ли они год вспомнить что, куда и зачем, а если работают 50 человек над игрой, 100? и при этом часть из них увольняется, всё должно быть в едином стиле, понятном для среднестатестического программиста, такой проект всегда можно расширить даже сменив всю команду
1
Заблокирован
14.01.2023, 17:49
Цитата Сообщение от alexu_007 Посмотреть сообщение
Не поэтому ли раньше неплохие игры умещались на одной-двух-трёх дискетах, и запускались на скромных компах, а сейчас требуются гигабайты и гигагерцы?
Как ни жаль, но не поэтому.
А потому что хочется быстро, легко и много $$$ .
1
2 / 2 / 0
Регистрация: 04.10.2022
Сообщений: 21
17.01.2023, 12:13  [ТС]
мне изначально нужен был код на питоне можешь пж его на питон переписать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2023, 12:13
Помогаю со студенческими работами здесь

Указать пару x, y таких натуральных чисел, что n=x^2+y^2
Мне надо решить эти две задачи.. надеюсь на вашу помощь.. 1) Дано натуральное число n. Можно ли представить его в виде суммы двух...

Дано произвольный одномерный массив целых чисел М и натуральное число n. Определить, если такие есть, количество чисел n в массиве М и их индексы
Ребята,помогите с заданием: Дано произвольный одномерный массив целых чисел М и натуральное число n. Определить, если такие есть,...

Дано натуральное число n и если это не палиндром
Дано n , если это не палиндром , то изменить порядок его цифр на обратный и сложить с исходным числом. Если сумма не палиндром , то...

Дано два числа A и B. Требуется найти пару чисел (P;Q) таких, что A <= P < Q <= B, а P and Q было максимально возможным,
Максимальный AND Дано два числа A и B. Требуется найти пару чисел (P;Q) таких, что A &lt;= P &lt; Q &lt;= B, а P and Q было максимально...

Дано натуральное число n. Если это не палиндром, реверсируйте его цифры и сложите исходное число с числом
Дано натуральное число n. Если это не палиндром, реверсируйте его цифры и сложите исходное число с числом, полученным в результате...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru