一、思路
把正方形切成 n n n 个小正方形,我们最先考虑的应该是平方数的情况 ,如果 n n n 为平方数,那么就可以把它切成 n n n 个一模一样的小正方形。
我们也可以考虑一下当 n ≤ 8 n\le8 n≤8 的情况,当 n = 1 n=1 n=1 或 n = 4 n=4 n=4 时, n n n 为平方数,所以 1 1 1 与 4 4 4 是可以的。
最后发现,当 n = 6 n=6 n=6、 n = 7 n=7 n=7 和 n = 8 n=8 n=8 也是可以的。
n
=
6
n=6
n=6:
n
=
7
n=7
n=7:
此时你可以根据以上思路编好代码,就可以骗到 35 分。
我们可以发现,正确的概率会比错误的概率大,我们可以尝试一下当
n
>
8
n>8
n>8 的情况都输出 Yes
,交上去时发现对了。
其实,当我们证明 6 6 6、 7 7 7、 8 8 8 都是可以的时候,如果我们把图形中的任意一块正方形切割成 4 4 4 个更小的正方形,就等于增加了 3 3 3 个小正方形。
那么
9
9
9 块就可以变为
6
6
6 块加
3
3
3 块。
那么
10
10
10 块就可以变为
7
7
7 块加
3
3
3 块。
那么
11
11
11 块就可以变为
8
8
8 块加
3
3
3 块。
以此类推。
推出结论:除了 n = 2 n=2 n=2、 n = 3 n=3 n=3 和 n = 5 n=5 n=5 以外,其余都为正确。
二、AC 代码
#include<bits/stdc++.h>
using namespace std;
bool pf(int n)//是否为平方数
{
if(int(sqrt(n))*int(sqrt(n))==n)return 1;
else return 0;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
if(n==2||n==3||n==5)cout<<"No\n";
else cout<<"Yes\n";
}
return 0;
}