题解 CF914A 【Perfect Squares】
rui_er
2019-03-28 18:15:09
根据题意,我们要求序列中的最大的非完全平方数。
求最大,有两种思路:
1. sort从大到小
2. max函数取最大
这里采用第二种思路。
----------------------
>头文件部分:
```cpp
#include <iostream>
#include <limits.h>
#include <math.h>
using namespace std;
```
iostream,C++基础头文件。
limits.h,为了后面的```INT_MIN```。
math.h,为了开方。
>判断不是完全平方数
```cpp
if(int(sqrt(a))*int(sqrt(a)) != a)
```
原理:int自动向下取整,平方根的平方就是数本身。
>取最大
```cpp
MAX = INT_MIN;
//中间代码
MAX = max(MAX, a);
```
INT_MIN是limits.h里面存储int的下界的常量,见:```#define INT_MIN (-2147483647-1)```
max函数是取前后的最大值的函数。
>把以上部分整合,得到完整代码:
```cpp
#include <iostream>
#include <limits.h>
#include <math.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a;
int MAX = INT_MIN;
for(int i=0;i<n;i++)
{
cin>>a;
if(int(sqrt(a)) * int(sqrt(a)) != a)
MAX = max(MAX, a);
}
cout<<MAX<<endl;
return 0;
}
```