[白俊]4673:セルフサービス番号


質問する


[Slver V]正解率:48%
https://www.acmicpc.net/problem/4673

の意見を打診

  • 生成者を見つけるのは難しい.配列を作成し、生成者の数を個別に表示して、除外する方向に操作します.
  • 生成者を探す計算は単独で関数としましょう
  • 学識

  • は最初、結果が10000より大きい場合はすぐに終了し、結果は後のいくつかの生成者の中で、いくつかを排除せずに直接出力する.
    もとは繰り返しの最後の時、resultは10000より大きい部分があって、それからまた小さくなりました.
    ->繰り返しの末尾部分をよくチェックします.常に増加しても、頻繁に減少しなくてもいいです.
  • これ、、、、、思ったより銀も解けるし、、、、、、?
  • コード#コード#

    #include <stdio.h>
    
    int calculate(int num);
    
    int main(){
        int result=0;
        int check[10000] = {0, };
        result = calculate(1);
        for(int i=2; i<10000; i++){
            if(result-1 < 10000)
                check[result-1] = 1;
            result = calculate(i);
        }
    
        for(int i=0; i<10000; i++){
            if(check[i]==0)
                printf("%d\n", i+1);
        }
    }
    
    int calculate(int num){
        int ans;
    
        ans = num;
        do{
            ans += num%10;
        }while((num/=10) != 0);
    
        return ans;
    }