7744问题

问题描述:输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数组也相等)

做这个问题前,我们先考虑一个问题:如何判定一个数是完全平方数?如何表达aabb这个变量?

一.假设一个数是n,我们如何判断它是完全平方数

第一步:可以求出其平方根,然后看它是否为整数,即用一个int型变量m存储 sqrt(n)四舍五入的结果后的整数。

第二步:判断m的平方是否等于n

注:函数floor(x)表示返回不超过x的最大整数,类似于数学中的取整函数[x],其功能是向下取整。例如 [1.2]=1,[0.9]=0;

二.如何表达aabb这个变量?

我们可以用int n = a*1100+b*11;存储即可!

程序代码如下:

第一种:

#include

int main()
{
	for (int a = 1; a <= 9; a++)
	{
		for (int b = 0; b <= 9; b++)
		{
			int n = a * 1100 + b * 11;
			int m = floor(sqrt(n) + 0.5);//+0.5是为了保证四舍五入
			if (m*m == n)
			{
				printf("%d\n", n);
			}
		}
	}
	return 0;
}

第二种:直接枚举

#include 

int main()
{
	for (int x = 1;; x++)
	{
		int n = x*x;
		if (n < 1000)
			continue;
		if (n > 9999)
			break;
		int high = n / 100;
		int low = n % 100;
		if (high / 10 == high % 10 && low / 10 == low % 10)
		{
			printf("%d\n", n);
		}
	}
	return 0;
}

 

你可能感兴趣的:(c++,算法)