zoukankan      html  css  js  c++  java
  • 蓝桥杯-四平方和问题

    蓝桥杯

    更多精彩文章请关注公众号『大海的BLOG』

    问题:

    四平方和定理,又称为拉格朗日定理:
    每个正整数都可以表示为至多4个正整数的平方和。
    如果把0包括进去,就正好可以表示为4个数的平方和。

    比如:
    5 = 0^2 + 0^2 + 1^2 + 2^2
    7 = 1^2 + 1^2 + 1^2 + 2^2 **
    **
    对于一个给定的正整数,可能存在多种平方和的表示法。
    要求你对4个数排序:
    0 <= a <= b <= c <= d
    并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法
    程序输入为一个正整数N (N<5000000)
    要求输出4个非负整数,按从小到大排序,中间用空格分开
    例如,输入:
    5
    则程序应该输出:
    0 0 1 2
    再例如,输入:
    12
    则程序应该输出:
    0 2 2 2
    再例如,输入:
    773535
    则程序应该输出:
    1 1 267 838
    资源约定:
    峰值内存消耗 < 256M
    CPU消耗 < 3000ms
    请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意: main函数需要返回0
    注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
    注意: 所有依赖的函数必须明确地在源文件中 #include, 不能通过工程设置而省略常用头文件。
    提交时,注意选择所期望的编译器类型。

    思路:

    这题我是暴力输出的,用四个循环,我先前用四个循环是从小加到大,但是超时了。我发现,输入的数越大,输出的前两个数是比较小的,但是后面两个数比较大,于是我把后面两个循环变成从大减到小,于是accept了

    实现代码(C)

    #include<stdio.h>
    #include<math.h>
    void solve(long n){
        int a[4];
        for (a[0]=0; a[0]<sqrt(n); a[0]++) {
            for (a[1]=a[0];a[1]<sqrt(n) ; a[1]++) {
                for (a[2]=sqrt(n-a[1]*a[1]-a[0]*a[0]); a[2]>=a[1]; a[2]--) {
                    for (a[3]=sqrt(n-a[1]*a[1]-a[2]*a[2]-a[0]*a[0])+1; a[3]>=a[2]; a[3]--) {//其实这里加1不加1都一样
                        if (a[0]*a[0]+a[1]*a[1]+a[2]*a[2]+a[3]*a[3]==n) {
                            printf("%d %d %d %d
    ",a[0],a[1],a[2],a[3]);
                            return ;
                        }
                    }
                }
            }
        }
    }
    int main(){
        long n;
        scanf("%ld",&n);
        solve(n);
        return 0;
    }
    

    更多精彩文章请关注公众号『大海的BLOG』

  • 相关阅读:
    第七章之main函数和启动例程
    第一章之系统调用、库函数、内核函数区别
    unp第七章补充之socket tcp 产生 rst响应的情况
    unp第七章补充之TCP半开连接与半闭连接
    Qt 布局管理器
    Qt setMargin()和setSpacing() 的含义
    工作感悟
    关于数组数据常用的技巧
    正则表达式练习
    call/apply应用-对象使用原型链上的方法
  • 原文地址:https://www.cnblogs.com/BIGOcean/p/12746335.html
Copyright © 2011-2022 走看看