题解 CF914A 【Perfect Squares】

rui_er

2019-03-28 18:15:09

Solution

根据题意,我们要求序列中的最大的非完全平方数。 求最大,有两种思路: 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; } ```