这道题当时自己没有做出来,因为自己的思路一开始就跑偏了,两个三角形或者四个三角形都能拼成一个小正方形,但是自己只考虑了小正方形是1*1,2*2,4*4,8*8...的大正方形。而事实上3*3,5*5,6*6...这些也都是正方形。只是样例里面没有提到,自己就没有想到,这是自己的一个大问题。之后如果钻牛角尖了就应该及时转换思路。
正确解法是判断n/2或者n/4是否是完全平方数即可。
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdio> 5 #include<cmath> 6 using namespace std; 7 double n; //注意这里应该是double类型 8 bool check(double x){ 9 int sqr=sqrt(x); 10 if(sqr*sqr==x) return true; 11 return false; 12 } 13 int main(){ 14 15 int T; 16 cin>>T; 17 while(T--){ 18 cin>>n; 19 if(check(n/2) || check(n/4)) cout<<"YES"<<endl; 20 else cout<<"NO"<<endl; 21 } 22 23 return 0; 24 25 }
Codeforces Global Round 14 B. Phoenix and Puzzle
原文:https://www.cnblogs.com/talk-sea/p/14731096.html