コーディングテスト練習記録

7880 ワード

2021.12.23 3 3日目
白駿4673号(セルフサービス番号)
質問する
セルフサービス番号は1949年にインドの数学者D.R.Kaprekarによって命名された.正の整数nについて、d(n)がnおよびnの各ビット数の関数を定義する.例えば、d(75)=75+7+5=87である.
正の整数nが与えられると、その数からn、d(n)、d(d(n)、d(d(d(n))、...無限数列を生成できます.
たとえば、33で始まると、次の数字は33+3+3=39、次の数字は39+3+9=51、次の数字は51+5+1=57となります.このようにして、次の数の列を生成できます.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
nをd(n)の生成者と呼ぶ.上の数列において、33は39の生成者、39は51の生成者、51は57の生成者である.生成者が1つより多い場合もあります.例えば、101には2つの構造関数(91および100)がある.
生成されていない数字を自動番号と呼びます.100未満のセルフサービス番号は全部で13個です.1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000以下のセルフ・サービス番号を出力するプログラムを作成します.
私の答え
  • 1から10000までのアレイ
  • を生成する.
  • ArrayList検証(追加、含む、削除)
  • を使用する.
    数字
  • を文字列に変換して、数字の桁数を決定します(長さ
  • ).

  • import java.util.ArrayList;
    
    public class Main {
        public static void main(String[] args) {
            Test test = new Test();
    
            test.number(10000);
        }
    }
    
    class Test {
        void number(int a) {
    
            ArrayList<Integer> al = new ArrayList<Integer>();
    
            for (int i = 1; i < a; i++) {
                al.add(i);
            }
    
            for (int x = 1; x < a;x++) {
                int selfNumber = 0;
                selfNumber += x;
    
                String strNum = "" + x;
    
                for (int z = strNum.length(); z > 0; z--) {
                    selfNumber += strNum.charAt(z - 1) - '0';
                }
    
                if (al.contains(selfNumber)) {
                    al.remove(Integer.valueOf(selfNumber));
                }
            }
    
            for (int q:al) {
                System.out.println(q);
            }
        }
    }
    考える
  • int to String
    1.Integer.toString()
    2.String.valueOf()
    3.int + ""
  • ArrayList
    1.追加-追加(オブジェクトo)
    2.削除-削除(int index)、削除(Object o)
    3.サイズ-size()
    4.フィーチャー-保存順序を保持し、
  • を繰り返すことができる.
  • Math.pow(double a, double b)