poj1338 Ugly Numbers(丑数模拟)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents

题目链接:http://poj.org/problem?id=1338

Description

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence

1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ...

shows the first 10 ugly numbers. By convention, 1 is included.

Given the integer n,write a program to find and print the n‘th ugly number.

Input

Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0.

Output

For each line, output the n’th ugly number .:Don’t deal with the line with n=0.

Sample Input

1
2
9
0

Sample Output

1
2
10

思路:用一个长度为1500的数组存储这些数,另有三个游标x,y,z;

a[1]=1,x=y=z=1,代表第一个数为1,此后的数都是通过已有的数乘以2,3,5得到的,

那么x,y,z分别代表a[x],a[y],a[z]可以通过乘以2,3,5来得到新的数,i递增,每次取2*a[x], 3*a[y], 5*a[z]

中的最小值,得到a[i]后,可以将对应的x(或y,z)右移,当然如果原本通过3*2得到6,那么2*3也能得到6,

因此可能x和y都需要递增。

详见代码:

#include <iostream>
using namespace std;
int min(int a, int b, int c)
{
	return min(a,min(b,c));
}
int main()
{
	int a[1517];
	int x, y, z, i;
	x = y = z = 1, a[1] = 1;
	for(i = 2; i <= 1500; i++)
	{
		a[i] = min(2*a[x],3*a[y],5*a[z]);
		if(a[i] == 2*a[x])
		x++;
		if(a[i] == 3*a[y])
		y++;
		if(a[i] == 5*a[z])
		z++;
	}
	int n;
	while(cin >> n && n)
	{
		cout<<a[n]<<endl;
	}
	return 0;
}

poj1338 Ugly Numbers(丑数模拟),布布扣,bubuko.com

时间: 2024-11-03 05:21:15

poj1338 Ugly Numbers(丑数模拟)的相关文章

lintcode 中等题:Ugly Numbers 丑数

题目 丑数 设计一个算法,找出只含素因子3,5,7 的第 k 大的数. 符合条件的数如:3,5,7,9,15...... 样例 如果k=4, 返回 9 挑战 要求时间复杂度为O(nlogn)或者O(n) 解题 法一:直接暴力,逐次判断一个数是不是丑数 下面只对其中的奇数判断是否是丑数,加不加奇数都超时. class Solution { /** * @param k: The number k. * @return: The kth prime number as description. */

POJ1338 Ugly Numbers(解法二)

问题链接:POJ1338 Ugly Numbers.基础级练习题,用C语言编写程序. 题意简述:不能被2.3和5以外的素数整除的数称为丑数,找出第1500个丑数. 问题分析:换句话说,丑数的因子只能是2.3和5.1是丑数,对于x,若x是丑数则2x.3x和5x是丑数.利用已知的丑数,从小到不断生成丑数就可以了. 程序中,结果放在数组ans[]中,也是生产丑数的x:素数放在数组prime[]中,这个问题只有2.3和5:生成的丑数放在数组ugly[]中,然后选出最小的放入结果数组ans[]中,对于被放

POJ1338 Ugly Numbers

问题链接:POJ1338 Ugly Numbers.基础级练习题,用C++语言编写程序. 题意简述:不能被2.3和5以外的素数整除的数称为丑数,找出第1500个丑数. 问题分析:换句话说,丑数的因子只能是2.3和5.1是丑数,对于x,若x是丑数则2x.3x和5x是丑数.利用已知的丑数,从小到不断生成丑数就可以了. 程序中,使用一个STL的容器set来存放丑数.集合具有去重复,自动排序的功能,对于解决本问题是方便的.但是,set对象无法用下标访问,所以倒腾到vector对象中再使用.本问题打表是合

poj 1338 Ugly Numbers(丑数模拟)

转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1338">http://poj.org/problem?id=1338 Description Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10

Ugly Numbers(POJ1338)(丑数,技巧性强)

Ugly Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20851   Accepted: 9248 Description Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ... shows the first 10 ugly num

Humble Numbers(丑数) 超详解!

给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑数为 h[n]. 算法 1: 一种最容易想到的方法当然就是从 2 开始一个一个的判断一个数是否为丑数.这种方法的复杂度约为 O( k * h[n]),铁定超时(如果你这样做而没有超时,请跟 tenshi 联系) 算法 2: 看来只有一个一个地主动生成丑数了 : 我最早做这题的时候,用的是一种比较烂的

UVA 136 &amp; POJ1338 Ugly Numbers

题目大意: Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, - shows the first 10 ugly numbers. By convention, 1 is included. 把只含有2.3.5因数的数称为丑数,默认第一个丑数是1. POJ是有多次询问,输出第n个丑数 UVA是询问第1500个丑数是多少. 思路:

DP:Humble Numbers,丑数

描述A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ... shows the first 20 humble numbers.  Write a program to find and print the nth elemen

(HDU)1058 --Humble Numbers( 丑数)

题目链接:http://vjudge.net/problem/HDU-1058 这题有点难度,自己写了半天依旧TLE,参考了其他人的博客. http://blog.csdn.net/pythonfx/article/details/7292835 http://blog.csdn.net/x_iya/article/details/8774087 第二个人的博客用的是DP,放在基础题里面不大合适. 1 #include <stdio.h> 2 int f[5843],n; 3 int i,j,