丑数

来源:互联网 发布:曾怡c语言视频教程 编辑:程序博客网 时间:2024/04/28 16:44

Version 1

/*丑数*/#include <iostream>using namespace std;int divide(int n, int m);int isUgly(int n);int main(){int n = 1;int account = 0;int num = 100;while (1){if (isUgly(n)){cout<<n<<endl;account++;}if (account == num){break;}n++;}system("pause");return 0;}int divide(int n, int m){while (n % m == 0){n = n / m;}return n;}int isUgly(int n){n = divide(n, 2);n = divide(n, 3);n = divide(n, 5);return (n == 1) ? 1 : 0;}

Version 2: Dynamic Programming : Bottom Up (Tabulation)

#include <iostream>using namespace std;#define bool int unsigned int min(unsigned int a, unsigned int b);unsigned int Minimum(unsigned int a, unsigned int b, unsigned int c);unsigned int getNthUglyNo(unsigned int n); int main(){unsigned int num = 150;    unsigned int no = getNthUglyNo(num);cout<<"The "<<num<<" Ugly num is: "<<no<<endl;    getchar();    return 0;}/* Function to get the nth ugly number*/unsigned int getNthUglyNo(unsigned int n){    unsigned int *ugly = new unsigned int [n];    unsigned int i2 = 0, i3 = 0, i5 = 0;    unsigned int next_multiple_of_2 = 2;    unsigned int next_multiple_of_3 = 3;    unsigned int next_multiple_of_5 = 5;    unsigned int next_ugly_no = 1;    ugly[0] = 1;     for(unsigned int i=1; i<n; i++)    {       next_ugly_no = Minimum(next_multiple_of_2, next_multiple_of_3, next_multiple_of_5);          ugly[i] = next_ugly_no;                              if(next_ugly_no == next_multiple_of_2)       {           i2 = i2 + 1;                  next_multiple_of_2 = ugly[i2] * 2;       }       if(next_ugly_no == next_multiple_of_3)       {           i3 = i3 + 1;           next_multiple_of_3 = ugly[i3] * 3;       }       if(next_ugly_no == next_multiple_of_5)       {           i5 = i5 + 1;           next_multiple_of_5 = ugly[i5] * 5;       }    }     return next_ugly_no;} unsigned int min(unsigned int a, unsigned int b){return a < b ? a : b;}unsigned int Minimum(unsigned int a, unsigned int b, unsigned int c){unsigned int mini = min(a, b);return c < mini ? c : mini;}


原创粉丝点击