完美平方数

完美平方数

如果整个整数X本身是完全平方数,同时它的每一位数字也都是完全平方数,我们就称X是完美平方数。 前几个完美平方数是 0、1、4、9、100、144…
请你计算第 2020 个完美平方数是多少?

使用的软件:Visual Studio 2017
代码如下.

#include<iostream>
#include<cmath>
#include<string>
using namespace std;
bool perfect[20] = { false };
void fun()
{
	int count = 0;
	perfect[0] = 1;
	perfect[1] = 1;
	perfect[4] = 1; 
	perfect[9] = 1;
	for (int i = 0; i <= 1000000000; i++)//i足够大以确保能有2020次完美平方数
	{
		int flag = 1;
		int temp = i * i;
		string str = to_string(temp);//整型转字符串型
		int len = str.length();
		for (int j = 0; j < len; j++)
		{
			int *num = new int[str.size()];
			num[j] = str[j] - '0';//字符型转整型
			if (!perfect[num[j]])//判断 temp(或str) 是否为 0,1,4,9组成
			{
				flag = 0;
				break;
			}
		}
		if (flag)
		{
			count++;
			cout << count << endl;  //等待过程无聊可以输出
		}
		if (count == 2020)
		{
			cout << temp << endl;  //需要等待30秒左右
			break;
		}
	}
}
int main()
{
	fun();
	return 0;
}

结果截图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较复杂的问题,需要用到一些学知识和算法。首先,我们可以枚举a1、a2和a3的所有可能取值,然后判断是否满足给定的条件。如果满足条件,则计算它们的和,并与之前的结果比较,保留最大值。 具体来说,我们可以用三重循环来枚举a1、a2和a3。对于每组取值,我们可以分别判断它们是否满足条件,具体如下: 1. 判断a1+a2是否为质:可以先计算它们的和sum,然后从2到sum-1枚举所有可能的因子,判断是否存在满足条件的因子即可。如果存在,则说明sum不是质。 2. 判断4a2+a3是否为完全平方数:可以先计算它们的和sum,然后求出sum的平方根sqrt_sum,判断sqrt_sum的整数部分是否等于4a2+a3即可。如果不等于,则说明sum不是完全平方数。 3. 判断a1+2a2+4a3是否为完美:可以先计算它们的和sum,然后枚举所有小于sum的正整数,计算它们是否为sum的因子,并累加起来。如果累加和等于sum,则说明sum是完美。 4. 判断a1+2a2+a3是否为k的倍:可以先计算它们的和sum,然后判断sum是否为k的倍。 最后,我们可以将满足条件的sum和对应的a1、a2、a3保存下来,最终输出它们的和最大值对应的a1、a2、a3即可。 需要注意的是,对于较大的n,直接枚举可能的a1、a2和a3会非常耗时,因此需要考虑一些优化方法,例如剪枝、缩小枚举范围等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值