`
u010815305
  • 浏览: 30451 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

丑数

 
阅读更多

题目:我们把只包含因子

235的数称作丑数(Ugly Number)。例如68都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。

思路:

我们可以创建一个数组,里面的数字是排好序的丑数。里面的每一个丑数是前面的丑数乘以2、3或者5得到的。

这种思路的关键在于怎样确保数组里面的丑数是排好序的。我们假设数组中已经有若干个丑数,排好序后存在数组中。
我们把现有的最大丑数记做M。现在我们来生成下一个丑数,该丑数肯定是前面某一个丑数乘以2、3或者5的结果。
我们首先考虑把已有的每个丑数乘以2。在乘以2的时候,能得到若干个结果小于或等于M的。由于我们是按照顺序生成的,
小于或者等于M肯定已经在数组中了,我们不需再次考虑;我们还会得到若干个大于M的结果,但我们只需要第一个大于M的结果,
因为我们希望丑数是按从小到大顺序生成的,其他更大的结果我们以后再说。我们把得到的第一个乘以2后大于M的结果,记为M2
。同样我们把已有的每一个丑数乘以3和5,能得到第一个大于M的结果M3和M5。那么下一个丑数应该是M2、M3和M5三个数的最小者。

前面我们分析的时候,提到把已有的每个丑数分别都乘以2、3和5,事实上是不需要的,因为已有的丑数是按顺序存在数组中的。
对乘以2而言,肯定存在某一个丑数T2,排在它之前的每一个丑数乘以2得到的结果都会小于已有最大的丑数,
在它之后的每一个丑数乘以2得到的结果都会太大。我们只需要记下这个丑数的位置,同时每次生成新的丑数的时候,
去更新这个T2。对乘以3和5而言,存在着同样的T3和T5。

#include<stdio.h>
#include<stdlib.h>


int min(int number1,int number2,int number3)
{
	int min=(number1<number2)?number1:number2;
	
	min=(min<number3)?min:number3;
	
	return min;
}
int getUglyNumber(int index)
{
	if(index<=0)
		return 0;
	int *pUglyNumbers=(int*)malloc(index*sizeof(int));
	pUglyNumbers[0]=1;
	int nextUglyIndex=1;
	
	int *pMultiply2=pUglyNumbers;
	int *pMultiply3=pUglyNumbers;
	int *pMultiply5=pUglyNumbers;
	
	while(nextUglyIndex<index)
	{
		int min=min(*pMultiply2*2,*pMultiply3*3,*pMultiply5*5);
		pUglyNumbers[nextUglyIndex]=min;
		
		while(*pMultiply2*2<=pUglyNumbers[nextUglyIndex]);
			++pMultiply2;
		while(*pMultiply3*3<=pUglyNumbers[nextUglyIndex]);
			++pMultiply3;
		while(*pMultiply5*5<=pUglyNumbers[nextUglyIndex]);
			++pMultiply5;
		
		++nextUglyIndex;
	}
	
	int ugly=pUglyNumbers[nextUglyIndex-1];
	free(pUglyNumbers);
	return ugly;
}

int main()
{
	int ugly=getUglyNumber(1500);
	printf("%d",ugly);
	return 0;
}




结果:

分享到:
评论

相关推荐

    经典数据算术----丑数

    丑数,又称“好看数”或“优美数”,在数学领域中是指仅包含质因数2、3和5的正整数。这类数的特点是它们可以表示为2的幂次、3的幂次和5的幂次的乘积。丑数的概念在计算效率优化和数学游戏中有广泛应用,因为它们具有...

    c实现的丑数

    在计算机科学中,"丑数"(也称为"好数")是指仅包含质因数2、3和5的正整数。它们是能够被这三个质数的任意次幂整除的数字。例如,1、2、3、4、5、6、8、9、10、12等都是丑数。本项目是用C语言实现的一个程序,用于...

    剑指Offer:丑数(Python)

    这个特定的问题,"丑数(Python)",要求编写一个Python程序来找到第N个丑数,即那些仅由质因子2、3和5组成的正整数。 丑数的概念是基于质数的乘积。质数是大于1且只有1和它自身两个正因数的自然数。题目中提到,1...

    求出第1500个的丑数是多少

    丑数,又称“不规则数”,是指一个正整数,其所有的质因数仅包含2、3和5。这个问题要求我们找到第1500个丑数。在数学上,解决此类问题通常需要构建一种算法,它能有效地生成丑数序列,并在序列中找到特定位置的数。 ...

    判断是否为丑数

    使用Java编写代码,判断一个给定的数是否为丑数。

    写个程序输出第1500个丑数

    /* 定义:因子只包含2/3/5的数字为丑数 比如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 这就是前11个,不失一般性,把1也算做一个 写个程序输出第1500个丑数 zhouqinfeng@yahoo.cn */

    找出第n个丑数

    指定一个下标(第n个),输出第n个丑数。例如n=10,返回的结果是1,2,3,4,5,6,8,9,10,12数列中的12

    丑数实验报告C语言.docx

    丑数,又称“不规则数”,是指只含有因子2、3和5的正整数。在C语言中,我们可以编写程序来判断一个数是否为丑数,并找出前n个丑数。以下是对“丑数实验报告C语言.docx”文件中涉及的知识点的详细解释: 1. **丑数...

    丑数(最小堆)1

    《丑数:最小堆的应用与理解》 在编程领域,我们常常遇到一些有趣的问题,比如“丑数”问题。丑数,顾名思义,是指那些由质因子2、3和5组成的正整数。这类问题在算法竞赛如LeetCode等平台中常被用来考察程序员对...

    c语言编程题之数学问题丑数.zip

    在C语言编程中,"丑数"通常是指那些只包含质因子2、3和5的正整数。例如,1、2、3、4、5、6、8、9、10、12等都是丑数,因为它们都可以被2、3或5的幂次整除。本编程题的目标是设计一个程序,用于找出并打印指定范围内...

    python-leetcode面试题解之第263题丑数.zip

    标题中的“python-leetcode面试题解之第263题丑数.zip”表明这是一个关于Python编程语言在LeetCode面试中的应用,具体聚焦于解决第263题——丑数的问题。LeetCode是一个在线平台,提供了大量的编程题目,帮助开发者...

    python-leetcode面试题解之第264题丑数II.zip

    标题中的“丑数II”指的是LeetCode第264题,这是一个关于算法和数学的问题,主要涉及Python编程语言。在面试中,此类问题通常用来测试应聘者的编程技巧、算法理解和数学逻辑。丑数(也称为“不完美数”)是指只包含...

    丑数c语言,两种解法,详细过程

    丑数,又称“丑陋数”,是指一个正整数,其所有的质因数仅包含2、3和5这三个数字。在C语言中,求解第n个丑数是常见的算法问题,可以有多种解决方法,这里主要讨论两种不同的实现方式。 **算法1:逐个判断法** 这种...

    丑数 c语言 逐行解释 数第几个丑数

    丑数,又称Humble Number,是指一个正整数只包含质因子2、3和5,也就是说它的质因数只能是2、3和5。例如,6和8都是丑数,因为它们可以分解为2×3和2×2×2。但是,7和14不是丑数,因为它们包含其他质因子。习惯上,...

    丑数查找的代码

    一段很经典的代码,希望给大家能带来帮助!

    丑数.md

    丑数.md

    丑数c语言实现例子.md

    丑数c语言

    【剑指Offer】33.丑数(Python实现)

    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 解法一:循环法 # -*- coding:utf-8 -*- ...

    LeetCode 313. 超级丑数(动态规划)

    编写一段程序来查找第 n 个超级丑数。 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。 示例: 输入: n = 12, primes = [2,7,13,19] 输出: 32 解释: 给定长度为 4 的质数列表 primes = [2,7,13...

Global site tag (gtag.js) - Google Analytics