当前位置: 首页 > news >正文

1221. 四平方和 -蓝桥杯真题-哈希函数思想

原题链接:1221. 四平方和 - AcWing题库

四平方和定理,又称为拉格朗日定理:

每个正整数都可以表示为至多 44 个正整数的平方和。

如果把 00 包括进去,就正好可以表示为 44 个数的平方和。

比如:

对于一个给定的正整数,可能存在多种平方和的表示法。

要求你对 44 个数排序:

0≤a≤b≤c≤d

并对所有的可能表示法按 a,b,c,d为联合主键升序排列,最后输出第一个表示法。

输入格式

输入一个正整数 N。

输出格式

输出4个非负整数,按从小到大排序,中间用空格分开。

数据范围

0<N<5∗106

输入样例:
5
输出样例:
0 0 1 2

 

#include <iostream>
#include <cstring> // 提供memset函数的头文件
#include <algorithm> // 虽然在这个程序中没有直接使用algorithm库中的函数,但有时它提供有用的泛型算法

using namespace std;

const int N = 5000010; // 定义一个常数N作为数组大小,这里N设置为5,000,010

int n; // 存储用户输入的目标数值
int C[N], D[N]; // 定义两个数组C和D,用于存储特定计算结果

int main()
{
    scanf("%d", &n); // 从标准输入读取一个整数,存储在变量n中

    memset(C, -1, sizeof C); // 使用-1初始化数组C,sizeof C返回C占用的字节数,确保所有元素都被初始化为-1

    // 遍历所有可能的c和d值,使得c^2 + d^2 <= n,并将这些值的结果存储在C和D数组中
    for (int c = 0; c * c <= n; c ++ )
        for (int d = c ; d * d + c * c <= n; d ++ )
        {
            int s = c * c + d * d; // 计算c^2 + d^2
            if (C[s] == -1) // 如果C[s]还未被赋值(即第一次找到该s值)
                C[s] = c, D[s] = d; // 将c和d分别存储到C[s]和D[s]中
        }

    // 查找是否存在a, b, c, d满足a^2 + b^2 + c^2 + d^2 = n
    for (int a = 0; a * a <= n; a ++ )
        for (int b = a; a * a + b * b <= n; b ++ ) // 注意b从a开始,避免重复组合
        {
            int s = n - a * a - b * b; // 计算剩余需要由c^2 + d^2填充的部分
            if (C[s] != -1) // 如果存在这样的c和d使得c^2 + d^2 = s
            {
                printf("%d %d %d %d\n", a, b, C[s], D[s]); // 输出找到的一组解
                return 0; // 找到一组解后立即退出程序
            }
        }

    return 0; // 如果没有找到任何解,则程序正常结束
}

相关文章:

  • 在 React 中使用 Hooks 从服务端获取数据的完整指南
  • 网络安全之前端学习(HTML属性篇)
  • 力扣刷题46. 全排列
  • HTML5前端第四章节
  • RG-S3760应用协议配置
  • 动静态库的使用和原理(下)
  • 区块链(Blockchain)
  • GED-VIZ部署解决方案
  • Java学习打卡-Day19-Set、HashSet、LinkedHashSet
  • Deepseek+扣子实现xhs内容自动采集
  • 云原生服务网格:微服务通讯的量子纠缠革命
  • ICLR 2025 机器人智能灵巧操作更进一步DexTrack
  • 线上课程小程序开发制作助力机构高效运营
  • Linux复习——基础IO,认识文件描述符、软硬件链接
  • 13 - linux 内存子系统
  • iQOO手机投屏到Windows有两种方法,其中一种可远程控制
  • Python 的 ​ORM(Object-Relational Mapping)工具浅讲
  • Llinux安装MySQL教程
  • 数组连续和 - 华为OD统一考试(C卷)
  • python中的allure报告使用
  • 西北大学副校长成陕西首富?旗下巨子生物去年净利超20亿,到底持股多少
  • 中国巴西关于乌克兰危机的联合声明
  • 熊出没!我驻日本札幌总领馆提示中国公民注意人身安全
  • 新华时评:中美经贸会谈为全球经济纾压增信
  • 全国汽车以旧换新补贴申请量突破1000万份
  • 港股持续拉升:恒生科技指数盘中涨幅扩大至6%,恒生指数涨3.3%