白駿1065号



問題名と分類


名前:韓秀
ブルトボス

質問する


正の整数Xの各位置が等差数列である場合、その数を1つの数と呼ぶ.等差数列とは、連続する2つの数の差が一定の数列を指す.Nが与えられた場合、プログラムを作成し、1以上、N以下の数値を出力します.

入力


最初の行は、1000以下の自然数Nを与える.

しゅつりょく


最初の行は、1以上、N以下の数値を出力します.

に答える


2桁は問題でいう「1桁」に相当するため、自然数Nが2桁以下であれば出力値はNとなる.
自然数Nが3桁以上であれば、桁ごとの差を比較して得られる値が同じかどうかを比較することができます.値段はみな同じで,違うのは計算しない.

コード#コード#

import java.util.Scanner;

public class Hansu {
    public static int calculation(int num){
        int numOfhansu=0;
        //num이 두자리수 이하면, num 리턴
        if((int)(Math.log10(num)+1)<=2){
            numOfhansu=num;
        }
        //세자리수 이상이면
        else{
            numOfhansu=99;
            for(int i=100;i<=num;i++){
                int[] arr=new int[(int)(Math.log10(i)+1)];
                int tmp=i;
                boolean flag=true;
                //각 자리의 수를 배열에 넣어준 다음
                for(int j=0;j<(int)(Math.log10(i)+1);j++){
                    arr[j]=tmp%10;
                    tmp/=10;
                }
                //자리 간 차이를 계산에 배열에 넣어주고
                for(int j=0;j<(int)(Math.log10(i)+1)-1;j++){
                    arr[j]=arr[j]-arr[j+1];
                }
                //차이 값들을 비교해 다른게 있다면 카운팅하고
                for(int j=0;j<(int)(Math.log10(i)+1)-2;j++){
                    if(arr[j]!=arr[j+1]) flag=false;
                }
                //차이 값들 모두가 일치하면 카운팅한다
                if(flag==true) numOfhansu++;
            }
        }
        return numOfhansu;
    }

    public static void main(String[] args){
        int num,result;
        Scanner scan=new Scanner(System.in);

        num=scan.nextInt();
        result=calculation(num);

        System.out.print(result);
    }
}