博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[蓝桥杯] 四平方和
阅读量:4573 次
发布时间:2019-06-08

本文共 1698 字,大约阅读时间需要 5 分钟。

[蓝桥杯] 四平方和

峰值内存消耗 < 256M  CPU消耗  < 3000ms

【题目描述 - Problem Description】

四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多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 12 773535
输出 0 0 1 2 0 2 2 2 1 1 267 838

 

 

 

【题解】

  搜索,注意剪枝。

  四层循环的速度可以……因为强迫症自己又写了个DFS版本……

 

【代码 C++】

1 #include 
2 int main() { 3 int i1, i2, i3, i4, s1, s2, s3, s4, n; 4 scanf("%d", &n); 5 for (i1 = 0;; ++i1){ 6 s1 = i1*i1; 7 for (i2 = i1; s1 + i2*i2 * 3 <= n; ++i2){ 8 s2 = s1 + i2*i2; 9 for (i3 = i2; s2 + i3*i3 * 2 <= n; ++i3){10 s3 = s2 + i3*i3;11 for (i4 = i3; s3 + i4*i4 <= n; ++i4){12 s4 = s3 + i4*i4;13 if (s4 == n){14 printf("%d %d %d %d\n", i1, i2, i3, i4);15 goto ed;16 }17 }18 }19 }20 }21 ed:;22 return 0;23 }
for
1 #include 
2 int n, q[5]; 3 bool isFid; 4 void DFS(int lst, int i, int sum){ 5 if (isFid) return; 6 if (i){ 7 int tmp; 8 while (sum + lst*lst*i <= n){ 9 q[i] = lst;10 DFS(lst, i - 1, sum + lst*lst);11 ++lst;12 }13 }14 else if (sum == n){15 printf("%d %d %d %d\n", q[4], q[3], q[2], q[1]);16 ++isFid;17 }18 }19 int main() {20 scanf("%d", &n);21 DFS(0, 4, 0);22 return 0;23 }
DFS

 

转载于:https://www.cnblogs.com/Simon-X/p/6516436.html

你可能感兴趣的文章
一个python的计算熵(entropy)的函数
查看>>
spring源码学习——spring整体架构和设计理念
查看>>
模拟window系统的“回收站”
查看>>
报文格式【定长报文】
查看>>
RDLC报表钻取空白页问题
查看>>
多路电梯调度的思想
查看>>
jQuery-对Select的操作
查看>>
过滤器、监听器、拦截器的区别
查看>>
为什么要进行需求分析?通常对软件系统有哪些需求?
查看>>
一些模板
查看>>
jquery和dom元素相互转换
查看>>
放大的X--HDOJ-201307292012
查看>>
题目831-签到-nyoj-20140818
查看>>
百词斩-斩家秘籍
查看>>
Mysql主从配置,实现读写分离
查看>>
TC1570 DesertWind
查看>>
CF277D Google Code Jam
查看>>
(七)unittest单元测试框架
查看>>
(八) 自动化测试的实例(以浏览器为例)
查看>>
js获取单选框和复选框的值并判断值存在后允许转跳
查看>>