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, 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

PS:用一个长度为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;
}
时间: 2024-10-10 12:19:51

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

51nod 1010 只包含因子2 3 5的数 &amp;&amp; poj - 1338 Ugly Numbers(打表)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 http://poj.org/problem?id=1338 首先poj这题要找出第n个丑数,想到要打表,因为每一个丑数都是由前一个丑数*2或者*3或者*5得到,每次取3种结果种较小的那一个放入数组中. 打表的时候要注意保持数组有序. 1 #include <iostream> 2 #include <cstdio> 3 #include <c

poj - 1338 - Ugly Numbers(优先队列)

题意:问第n(n <= 1500)小的丑数(质因数只有2或3或5)是几. 题目链接:http://poj.org/problem?id=1338 -->>1, 2, 3, 4, 5, 6, 8, ... 假设小根堆存以上丑数,那么每次取出最小的数,这个最小的数nMin,它可以生成三个数:nMin * 2, nMin * 3, nMin * 5,将这三个数放入小根堆继续,一直复筛出1500个丑数为止. 小根堆可用优先队列来替代. #include <cstdio> #inclu

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. */

poj 1338 Ugly Numbers

Ugly Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21315   Accepted: 9520 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

POJ 1338 Ugly Numbers dp

 Ugly Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21867   Accepted: 9767 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

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 number

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: 看来只有一个一个地主动生成丑数了 : 我最早做这题的时候,用的是一种比较烂的

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,