2016蓝桥杯C/C++省赛 四平方和(暴力,水题)
2017-03-25 15:37
99 查看
题目:
直接暴力就好。。
代码:
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define N 5000000+20
#define M 1000000+10
#define LL long long
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int m=sqrt(n);
for(int a=0; a<=m; a++)
for(int b=a; b<=m; b++)
for(int c=b; c<=m; c++)
for(int d=c; d<=m; d++)
if(a*a+b*b+c*c+d*d==n)
{
printf("%d %d %d %d",a,b,c,d);
return 0;
}
return 0;
}
2018年03月29日17:10:02更新,可以采取更巧妙一点的方法#include <stdio.h>
#include <math.h>
int mpt[5000010] = {0}; //mpt[i] = 1表示i 能够用两个完全平方数相加而得。
int n;
void init()
{
for(int i = 0 ; i*i <= n ; i ++)
for(int j = 0 ; j*j <=n ; j ++)
if(i*i+j*j <= n) mpt[i*i+j*j] = 1;
}
int main()
{
int flag = false;
scanf("%d",&n);
init();
for(int i = 0 ; i * i <= n ; i ++)
{
for(int j = 0 ; j * j <= n ; j ++)
{
if(mpt[n - i*i - j*j] == 0) continue; //如果剩下的差用两个完全平方数不能组合出来就不继续
for(int k = 0 ; k * k <= n ; k ++)
{
int temp = n - i*i - j*j - k*k;
double l = sqrt((double) temp);
if(l == (int)l )
{
printf("%d %d %d %d\n",i,j,k,(int)l);
flag = true;
break;
}
}
if(flag)break;
}
if(flag)break;
}
return 0;
}
直接暴力就好。。
代码:
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define N 5000000+20
#define M 1000000+10
#define LL long long
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int m=sqrt(n);
for(int a=0; a<=m; a++)
for(int b=a; b<=m; b++)
for(int c=b; c<=m; c++)
for(int d=c; d<=m; d++)
if(a*a+b*b+c*c+d*d==n)
{
printf("%d %d %d %d",a,b,c,d);
return 0;
}
return 0;
}
2018年03月29日17:10:02更新,可以采取更巧妙一点的方法#include <stdio.h>
#include <math.h>
int mpt[5000010] = {0}; //mpt[i] = 1表示i 能够用两个完全平方数相加而得。
int n;
void init()
{
for(int i = 0 ; i*i <= n ; i ++)
for(int j = 0 ; j*j <=n ; j ++)
if(i*i+j*j <= n) mpt[i*i+j*j] = 1;
}
int main()
{
int flag = false;
scanf("%d",&n);
init();
for(int i = 0 ; i * i <= n ; i ++)
{
for(int j = 0 ; j * j <= n ; j ++)
{
if(mpt[n - i*i - j*j] == 0) continue; //如果剩下的差用两个完全平方数不能组合出来就不继续
for(int k = 0 ; k * k <= n ; k ++)
{
int temp = n - i*i - j*j - k*k;
double l = sqrt((double) temp);
if(l == (int)l )
{
printf("%d %d %d %d\n",i,j,k,(int)l);
flag = true;
break;
}
}
if(flag)break;
}
if(flag)break;
}
return 0;
}
相关文章推荐
- 2016蓝桥杯C/C++省赛 凑算式+搭积木(暴力,水题)
- 2016蓝桥杯省赛B组C/C++
- 2016蓝桥杯C/C++省赛 方格填数(深搜DFS)
- 2016蓝桥杯C/C++省赛B组第6题 方格填数 DFS
- 2016蓝桥杯C/C++省赛 寒假作业(深搜DFS)
- 第七届 蓝桥杯 c/c++ B组 省赛 (8)——四平方和
- 2016蓝桥杯c/c++ B组 省赛 方格填数
- 蓝桥杯 2016 省赛B组 四平方和 (暴力)
- 蓝桥杯-【四平方定理】【2016年省赛B组题解】【C++】
- 第七届蓝桥杯省赛C\C++B组题目之四平方和
- 2016蓝桥杯C/C++省赛 剪邮票(深搜DFS+暴力)
- 2016蓝桥杯C/C++省赛 卡片换位(深搜DFS)
- 蓝桥杯-【方格填数】【2016年省赛B组题解】【C++】——暴力破解
- poj 2029 (暴力枚举)水题
- 蓝桥杯 第三届C/C++预赛真题(8) 密码发生器(水题)
- 蓝桥杯 第四届C/C++预赛真题(5) 前缀判断(水题)
- codeforces 271A Beautiful Year(暴力水题)
- C++:暴力搜索全排列解决背包问题
- hdu 1172 (暴力水题)
- 杭电1239————缩小数据范围的暴力搜索(水题)