zoukankan      html  css  js  c++  java
  • 寻找丑数

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

    分析:请看如下图:

             index     index2(*2)    index3(*3)   index5(*5)        value

               0             0                     0                0                 1

               1             1                     0                0                min(2,3,5)=2

               2             1                     1                0                min(4,3,5)=3

               3             2                     1                0                min(4,2*3,5)=4

               4             2                     1                1                min(6,6,5)=5

               5             2                     1                2                min(6,6,10)=6

      ....

    // 丑数.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    int FindMin(const int a,const int b,const int c)
    {
        int min=(a<b?a:b);
        return (min<c?min:c);
    }
    
    void FindChoushu(const int number)
    {
        if(number<=0)
            return;
        //一定要明确是按照由小到大的排序存储的,所以每次我们选择的是最小的;
        int index=0;
        int *Choushu_num=new int[number];
        Choushu_num[0]=1;  //先初始化;
        cout<<Choushu_num[0]<<endl;
        int index2=0;
        int index3=0;
        int index5=0;
        int min_Choushu=0;
        while (index<number-1)      //当把1当做第一个丑数的时候,需要把数组第一位已经占了一位了;
        {
            min_Choushu=FindMin( Choushu_num[index2]*2, Choushu_num[index3]*3, Choushu_num[index5]*5 );
            if (min_Choushu==Choushu_num[index2]*2)    //每次index2或者index3++或者index5++的时候,都伴随着其Choushu_num[index2(3,5)]的增加;
                index2++;
            if (min_Choushu==Choushu_num[index3]*3)
                index3++;
            if (min_Choushu==Choushu_num[index5]*5)
                index5++;
            Choushu_num[++index]=min_Choushu;  //记得++index;
            cout<<min_Choushu<<endl;
        }
        delete [ ]Choushu_num;
    }
    void main()
    {
       FindChoushu(10);
    }

            

  • 相关阅读:
    深入 kernel panic 流程【转】
    HDMI驱动热插拔检测方法
    WFE和WFI的区别
    SMP多核启动
    CPUFreq驱动
    DMA与cache一致性的问题
    深度理解select、poll和epoll
    Memory barrier 简介
    thinkphp的删除操作
    HOST文件配置
  • 原文地址:https://www.cnblogs.com/menghuizuotian/p/3823941.html
Copyright © 2011-2022 走看看