前往
大廳
主題

[OJ練習] 136、11332

テリ君(桃夫模式) | 2022-11-30 11:26:52 | 巴幣 2 | 人氣 122

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之前作業做過,其實也可以搞成陣列版本的但我覺得沒必要,然後有小改良一下函式,最近這幾題好像都比較鼓勵練習者嘗試寫函式?


創作回應

更多創作