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<stdio.h>

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 <stdio.h>

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

 

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值