zoukankan      html  css  js  c++  java
  • 丑数

    http://poj.org/problem?id=1338
    题意:
    因子中只含2 3 5的数成为丑数;

    分析:
    可以判断每一个数是不是丑数,但是这样太慢,可以根据定义直接求出每一个丑数

    因为每一个丑数都是在已有的丑数中通过乘以2或3或5得来的
    第一步: 每一个数都乘以2,会得到很多大于或者小于当前的最大丑数,小于当前的最大丑数已经在当前丑数序列中,因此不用记录
    因为我们要递增的找出丑数所以只需刚刚好大于当前的最大丑数即可并记录下来;
    第二步 :每一个数都乘以3...................................记录下刚刚大于当前最大的丑数即可

    第三步 ;每一个数都乘以5...................................记录下刚刚大于当前最大的丑数即可

    第四步:找出三个数中最小的数就是下一个丑数;

    include<stdio.h>

    include

    using namespace std;
    int ugly[1550];
    void print()
    {
    ugly[1]=1;
    ugly[2]=2;
    ugly[3]=3;
    ugly[4]=4;
    ugly[5]=5;

     int n=5;
     bool max1Op=true,max2Op=true,max3Op=true;
     int max1,max2,max3;
     while(n<=1500)
     {
         for(int i=1;i<=n;i++)
        {
    
         if(max1Op)  max1=ugly[i]*2;
         if(max1>ugly[n])max1Op=false;
         if(max2Op)  max2=ugly[i]*3;
         if(max2>ugly[n])max2Op=false;
         if(max3Op)  max3=ugly[i]*5;
         if(max3>ugly[n])max3Op=false;
        }
        max1Op=true,max2Op=true,max3Op=true;
        ++n;
        ugly[n]=min(max1,min(max2,max3));
     }
    

    }
    int main()
    {
    print();
    int n;
    while(scanf("%d",&n),n)
    printf("%d ",ugly[n]);
    return 0;

    }

    梦里不知身是客,一晌贪欢。
  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/5258949.html
Copyright © 2011-2022 走看看