描述 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.
输入 Each line of the input contains a postisive integer n (n <= 1500).Input is terminated by a line with n=0. 输出 For each line, output the n’th ugly number .:Don’t deal with the line with n=0. 样例输入 1 2 9 0 样例输出 1 2 10
分析: 建立数据表,然后查找数据表,输出结果。
思路: 可以用C++中set,且它的元素唯一,有序。
//冰非寒(binfeihan@126.com) //260kB 0ms 1196 B G++ #include <cstdio> #include <set> using namespace std; //global variables const int N =1601; set<unsigned long>uglynum; //functions void init(); void print(int); //main function int main(){ int n; init(); while(scanf("%d",&n) == 1&&n){ print(n); } return 0; } //initialize ugly numbers void init(){ int j(1); pair<set<unsigned long>::iterator,bool> ptr; uglynum.insert(1); for(set<unsigned long>::iterator it = uglynum.begin();j < N;++ it){ ptr = uglynum.insert(*it * 2); if(ptr.second == 1){ j ++; } ptr = uglynum.insert(*it * 3); if(ptr.second == 1){ j ++; } ptr = uglynum.insert(*it * 5); if(ptr.second == 1){ j ++; } } } //print result void print(int n){ int j(1); for(set<unsigned long>::iterator it = uglynum.begin();j <= n && it != uglynum.end();++ it){ if(j == n){ printf("%u\n",*it); } j ++; } }
描述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 int...