zoukankan      html  css  js  c++  java
  • poj 1338 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


    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;
    }



  • 相关阅读:
    linux 下安装 mysql (centos7)版本
    linux 安装php7 -系统centos7
    Beta阶段事后分析
    Beta阶段展示博客
    Beta阶段测试报告
    Beta阶段发布说明
    第二十次ScrumMeeting博客
    第十九次ScrumMeeting博客
    第十八次ScrumMeeting博客
    第十七次ScrumMeeting博客
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5371179.html
Copyright © 2011-2022 走看看