判断一个数是否为平方数

判断一个数是否为平方数

     

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; 
}




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值