N6. 白駿1065



一手の問題.


漢秀という言葉を初めて聞きました.
では簡単に説明してみましたが、何なのか分かりませんが、まず例入出力例を見て、簡単に理解しました.
3桁から2つ以上の差があり、比較すると等差数列であることがわかります.
1桁と2桁の数字には値差がなく、1つしかないので、すべて含まれています.
1桁と2桁はまず基本的に含まれる関数を考えた.
int count=0;
		
		for(int i=1; i<=n; i++) {
			
			if(i < 100) count++;
これで簡単に含めることができます.
そこでnはユーザに必要な数を入力する変数である.
次に、100と1000の間の数字は%10, /10を使用して、新しい配列に各ビット数を格納します.
			else if(i >= 100 && i < 1000) {
				int b = i;
				int j = 0;
				while(b!=0) {	// b값이 0이될때까지 계속
					save[j] = b%10;	// 각자리수를 배열에 하나씩 저장
					b /= 10;
					
					j++;
				}
				
				result[0] = save[0] - save[1];
				result[1] =	save[1] - save[2];
				
				if(result[0] == result[1])	count++;
各ビット数は、アレイsave[]に格納される.
各ビット数の差異をresult[]に格納して比較し、値が一致するとカウントするように設計した.

<フルコード>

import java.util.Scanner;

public class Main01 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int[] save = new int[4];
		int[] result = new int[3];
		int count=0;
		
		for(int i=1; i<=n; i++) {
			
			if(i < 100) count++;
			
			else if(i >= 100 && i < 1000) {
				int b = i;
				int j = 0;
				while(b!=0) {	// b값이 0이될때까지 계속
					save[j] = b%10;	// 각자리수를 배열에 하나씩 저장
					b /= 10;
					
					j++;
				}
				
				result[0] = save[0] - save[1];
				result[1] =	save[1] - save[2];
				
				if(result[0] == result[1])	count++;
				
			} else {
				int b = i;
				int j = 0;
				while(b!=0) {	// i값이 0이될때까지 계속
					save[j] = b%10;	// 각자리수를 배열에 하나씩 저장
					b /= 10;		// b값 새로고침
					
					j++;
				}
				
				result[0] = save[0] - save[1];
				result[1] = save[1] - save[2];
				result[2] = save[2] - save[3];
				if(result[0] == result[1] && result[1] == result[2]) 
					count++;
			}
			
		}
		
		System.out.println(count);
	}
	
}
ps. 중간에 각자리수의 차이를 절댓값(abs)로 저장하였더니 101, 195와 같은 수까지 함께 계산되어져 곤란했다. 이거 찾는데 40분은 잡아먹힘..😳