金蝉平方数

2023-10-18 07:59
文章标签 平方 金蝉

本文主要是介绍金蝉平方数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       参考文献:郭继展,郭勇,苏辉《程序算法与技巧精选》,机械工业出版社,2008年5月第一版,ISBN 978-7-111-23816-4,第5.6节。

       定义:设s是一个平方数,由1,2,3,4,5,6,7,8,9,0中无重复的数字组成。s经一次脱壳(即同时去掉其最高位与最低位数字)后剩下的数还是平方数。如果剩下的数仍多于2位,再行脱壳,剩下的数仍是平方数。以此类推,直至最后剩下的数(一位或两位)仍是平方数,这样的数s称为金蝉平方数。

       例如:38416是196的平方,38416脱壳后的841是29的平方,841脱壳后的4是2的平方,所以38416是金蝉平方数。

       问题:求解出所有的金蝉平方数。

       算法分析

       (1)s的值必定小于9876543210,否则数字必定重复。

       (2)本章思想,平方数问题——算法多从数的平方下手,枚举0~9876543210内的平方数(3万多个),而不是枚举0~9876543210内的每一个数,这是算法优化的关键。

       (3)得到平方数后,先判断各个数字的出现有无重复。(用isudig函数实现)

       (4)再用一个递归函数判断当前或多次脱壳后是否为平方数。(用isjcpfs函数实现,jcpfs即"金蝉平方数"拼音首字母组合)

      实现代码

       “mymath.h”:http://blog.csdn.net/code4101/article/details/17993747

       “debug.h”:http://blog.csdn.net/code4101/article/details/17993293

#include <iostream>
#include "mymath.h" 
#include "debug.h"
using namespace std;int isjcpfs(__int64 v)
{if(fmod(sqrt(v),1)) return 0;		// 当且仅当fmod(sqrt(v),1)值为0时,v为平方数else if(v<100) return 1;v/=10;					// 脱去最低位v%=(int)(pow(10, (int)log10(v)));	// 脱去最高位return isjcpfs(v);
}int main()
{int		c=0;__int64 i;tic;cout << "所有的金蝉平方数:\n";for(i=0; i<sqrt(9876543210); i++) if(isudig(i*i)) if(isjcpfs(i*i))printf("%2d: %6I64d\n",++c,i*i);cout<<"计算用时"; toc;return 0;
}

        运行结果截图

        


这篇关于金蝉平方数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231267

相关文章

代码随想录:977. 有序数组的平方

977. 有序数组的平方 法一:用函数sort来写 class Solution {public:vector<int> sortedSquares(vector<int>& nums) {for(auto &i:nums)i*=i;sort(nums.begin(),nums.end());return nums;}}; 法二:双指针 因为原数组有序,所以我们用双指针遍历两边,把大的

python 实现perfect square完全平方数算法

python 实现perfect square完全平方数算法介绍 完全平方数(Perfect Square)是一个整数,它可以表示为某个整数的平方。例如,1,4,9,16,25,… 都是完全平方数,因为 1 = 1 2 , 4 = 2 2 , 9 = 3 2 1=1^2,4=2^2,9=3^2 1=12,4=22,9=32,依此类推。 要判断一个给定的数 n 是否是完全平方数,有几种方法可以

有向图的平方图算法分析与实现

有向图的平方图算法分析与实现 1. 使用邻接链表表示图2. 使用邻接矩阵表示图3.总结 有向图的平方图(Graph Squaring)是一种图论中的操作,其目的是创建一个新图,其中如果原图中存在一条最多由两条边构成的路径从顶点u到顶点v,则在平方图中存在一条边(u, v)。本文将探讨如何通过邻接链表和邻接矩阵两种方式来表示有向图,并分别给出计算其平方图的算法,同时分析这些算法的时间

[Algorithm][综合训练][字符编码][最少的完全平方数][游游的字母串]详细讲解

目录 1.字符编码1.题目链接2.算法原理详解 && 代码实现 2.最少的完全平方数1.题目链接2.算法原理详解 && 代码实现 3.游游的字母串1.题目链接2.算法思路详解 && 代码实现 1.字符编码 1.题目链接 字符编码 2.算法原理详解 && 代码实现 解法:给一个字符串进行二进制编码,使得编码后的字符串长度最短 --> 哈夫曼编码#include <i

平方Pearson相关系数(SPCC)相关公式的推导

1、PCC及SPCC的定义 最近推导了维纳滤波的公式,其中最重要的是当然是最小平方误差准则(MSE)。但是在很多实际应用中,参考信号是不可知的,因此MSE准则不具有实际意义。为了解决这个问题,我们需要寻找另一个准则替代MSE成为新的代价函数。这就是皮尔逊相关系数(Pearson Correlation Coefficient, PCC)的来历。通过研究发现,相较于MSE,PCC具有许多吸引人的优

代码随想录训练营 Day38打卡 动态规划 part06 322. 零钱兑换 279. 完全平方数 139. 单词拆分

代码随想录训练营 Day38打卡 动态规划 part06 一、力扣322. 零钱兑换 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示例: 输入:coins = [1, 2, 5], amount = 1

csdn第五届在线编程大赛-完全平方

题目详情 给定整数区间[A,B]问其中有多少个完全平方数。 输入格式: 多组数据,包含两个正整数A,B 1<=A<=B<=2000000000。 输出格式: 每组数据输出一行包含一个整数,表示闭区间[A,B]中包含的完全平方数的个数。 答题说明 输入样例 1 1 1 2 3 10 3 3 输出样例: 1 1 2 0 解答: #include<

【代码随想录训练营第42期 Day38打卡 - 动态规划Part6 - LeetCode 322. 零钱兑换 279.完全平方数 139.单词拆分

目录 一、做题心得 二、题目与题解 题目一:322. 零钱兑换 题目链接 题解:动态规划--完全背包  题目二: 279.完全平方数 题目链接 题解:动态规划--完全背包 题目三:139.单词拆分 题目链接 题解:动态规划--完全背包 三、小结 一、做题心得 今天来到了代码随想录动态规划章节的Part6,依旧是完全背包问题的应用。相对于前边直接套用模板,今天

C++ | Leetcode C++题解之第367题有效的完全平方数

题目: 题解: class Solution {public:bool isPerfectSquare(int num) {double x0 = num;while (true) {double x1 = (x0 + num / x0) / 2;if (x0 - x1 < 1e-6) {break;}x0 = x1;}int x = (int) x0;return x * x == n

Python | Leetcode Python题解之第367题有效的完全平方数

题目: 题解: class Solution:def isPerfectSquare(self, num: int) -> bool:x0 = numwhile True:x1 = (x0 + num / x0) / 2if x0 - x1 < 1e-6:breakx0 = x1x0 = int(x0)return x0 * x0 == num