//因为没有理解ugly number的意思WA了2次,还好有Discuss.... //ugly_num中每一个数都得基于里头有的数去乘2,3,5, //例如14不是ugly_num因为7*2=14,但7不是ugly_num里面有的 #include<iostream> using namespace std; long ugly_num[1501]; int pFactor2,pFactor3,pFactor5,n; int main() { pFactor2 = pFactor3 = pFactor5 = 1;//为每个因数分配一个数组下标指针,每取到最小值一次就右移一位 ugly_num[1] = 1; for(int i = 2;i <= 1500; i++) { ugly_num[i] = min(ugly_num[pFactor2]*2,min(ugly_num[pFactor3]*3,ugly_num[pFactor5]*5)); if(ugly_num[i] == ugly_num[pFactor2]*2) { pFactor2++; } if(ugly_num[i] == ugly_num[pFactor3]*3) { pFactor3++; } if(ugly_num[i] == ugly_num[pFactor5]*5) { pFactor5++; } } while(scanf("%d",&n)) { if(n == 0) break; printf("%ld/n",ugly_num[n]); } return 0; }