• 寻找丑数


    题目:我们把只包含因子 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);
    }

            

  • 相关阅读:
    OpenCV__Canny边缘检测和缩放(译)
    OpenCV_avi读入视频
    Canny边缘检测源码与图像结果(OpenCV2.0)
    OpenCV_累加一个三通道矩阵中的所有元素
    tomcat下出现 java.lang.OutOfMemoryError: Java heap space
    清空和截断数据库日志并收缩数据库
    java.lang.OutOfMemoryError: Java heap space 的解决
    java.lang.OutOfMemoryError: Java heap space 解决方法
    通达OA 2008 工作流数据库表的大致结构
    java获取本月的第一天和最后一天
  • 原文地址:https://www.cnblogs.com/menghuizuotian/p/3823941.html
Copyright © 2020-2023  润新知