136(2/5)
#include <stdio.h> int min(int a, int b){ return (a > b) ? b : a; } int main(){ int n[1500] = {1}; int n2 = 0, n3 = 0, n5 = 0; for(int i = 1; i < 1500; i++){ for(n2; n2 < i; n2++){ if(n[n2] * 2 > n[i - 1]) break; } for(n3; n3 < i; n3++){ if(n[n3] * 3 > n[i - 1]) break; } for(n5; n5 < i; n5++){ if(n[n5] * 5 > n[i - 1]) break; } // Get 3 numbers of different prime factors. // Break means get the first one then go to next. n[i] = min(n[n2] * 2, n[n3] * 3); n[i] = min(n[i], n[n5] * 5); // Compare the 3 numbers of different prime factors. } printf("The 1500'th ugly number is %d.\n", n[1499]); return 0; } |
11332(1/5)
#include <stdio.h> int main(){ int n; while(scanf("%d", &n)){ if(n == 0 || n > 2000000000) break; printf("%d\n", get_result(n)); } return 0; } int result(int n){ int sum = 0; while(n != 0){ sum = sum + n % 10; n /= 10; } return sum; } int get_result(int n){ while(n / 10) n = result(n); return n; } |
136學了一個很簡單一串就結束的min函式,然後三個質數的倍數要分開討論,一起討論基本上永遠會抓2的倍數結果就會跑出1、2、4、8、16、32、64...
11332之前作業做過,其實也可以搞成陣列版本的但我覺得沒必要,然後有小改良一下函式,最近這幾題好像都比較鼓勵練習者嘗試寫函式?