[蓝桥杯2015初赛]方程整数解


题目描述
方程: a^2 + b^2 + c^2 = 1000
这个方程有正整数解吗?有:a,b,c=6,8,30 就是一组解。
求出 a^2 + b^2 + c^2 = n(1<=n<=10000)的所有解,解要保证c>=b>=a>=1。
输入
存在多组测试数据,每组测试数据一行包含一个正整数n(1<=n<=10000)
输出
如果无解则输出"No Solution"。
如果存在多解,每组解输出1行,输出格式:a b c,以一个空格分隔
按照a从小到大的顺序输出,如果a相同则按照b从小到大的顺序输出,如果a,b都相同则按照c从小到大的顺序输出。
样例输入 Copy
4
1000
样例输出 Copy
No Solution
6 8 30
10 18 24

#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>

#define x first
#define y second

using namespace std;

const int N = 2500010;

int n, m;
unordered_map<int, int> S;

int main()
{
   while(cin >> n){
   	int res = 0;
    for (int c = 0; c * c <= n; c ++ )
        {
            int t = c * c;
            if (S.count(t) == 0) S[t] = {c};
        }

    for (int a = 1; a * a <= n; a ++ )
        for (int b = a; a * a + b * b <= n; b ++ )
        {
            int t = n - a * a - b * b;
            if (S.count(t) && a <= b && b<= S[t])
            {

                printf("%d %d %d\n", a, b, S[t]);
                res++;
            }
        }
   		if(!res){
   			cout << "No Solution" << endl;
   		}
   } 

    return 0;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM