判断一个数是否为平方数
1. 题目描述
师兄面试的题目:给定一个数N,如何判断N时候为另一个数的平方,即是否为平方数。
2. 暴力搜索法
这个解法简单粗暴,即从1开始遍历,可以遍历到sqrt(N),也可以遍历到N.判断i的平方时候恰好等于N。
如果恰好相等,则N是平方数;
否则,N不是平方数。
3. 等差数列法
这种思路又验证了:好的算法都是来源于数学。
我们先抛开这个问题不看,大家都知道等差数列的吧~好,我们就来看看一个等差数列,他的a0=1,,d=2,那么an=2*n-1.
那么我们对这个等差数列求和会发生什么呢?如下:
我们突然发现,这个等差数列求和居然就正好n的平方,那么也就是说任何一个平方数都可以拆分成一个等差数列求和!
我们可以应用这个思想来解决上面的题目。有个需要注意的:这个等差数列初值为1,等差为2。
代码如下:
#include<iostream>
using namespace std;
bool IsSquare(int N)
{
int i;
for(i=1; N>0; i+=2) //变化步长为2, 初值为1,一直减到N大于0
{
N-=i;
}
if(N==0)
return true; //如果N减到最后,恰好等于0,就是平方数
else
return false; //否则,就不是平方数
}
int main()
{
int N;
cin>>N;
bool flag=IsSquare(N);
cout<<flag<<endl;
return 0;
}