はじめに
自分用の備忘録。
問題
下記のリンクを参考にしてね
ABC083B - Some Sums , AtCoder Beginners Selection, https://atcoder.jp/contests/abs/tasks/abc083_b
解答例
import java.util.*; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int A = sc.nextInt(); int B = sc.nextInt(); int ans = 0; for (int i = 1; i <= N; i++) { int sum = 0; String nowNumString = String.valueOf(i); char[] nowChar = nowNumString.toCharArray(); for (int j = 0; j < nowChar.length; j++) { int num = Integer.parseInt(String.valueOf(nowChar[j])); sum += num; } if (sum >= A && sum <= B) { ans = ans + i; } } System.out.println(ans); } }
ポイント解説
基本的にcharをintに変換するには次のコードを使う。まあ、状況に合わせて、変更する形だが。下記のコードの意味だがまずはCharをStringに変え、そして、そのStringをintに変えるという意味da!
int n = Integer.parseInt(String.valueOf(ch));
意外とこのコードも頻出なので、覚えておきたい。これはstringをcharの配列に格納する感じ。010という数字が与えられて、その中の1は何個ありますか?みたいな問題の時によく使われるよ!数字を分けたい、それぞれのけたを足し合わせたい、みたいなときに使うねー。
char[] nowChar = nowNumString.toCharArray();
その他の解答例
その1
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // N, A, Bを読み込む int N = sc.nextInt(); int A = sc.nextInt(); int B = sc.nextInt(); // 総和を保存する変数を定義する int sum = 0; // 1からNまでの整数でループする for (int i = 1; i <= N; i++) { // 各桁の和を求める int digitSum = 0; for (int j = i; j > 0; j /= 10) { digitSum += j % 10; } // 各桁の和がA以上B以下である場合、sumに加算する if (A <= digitSum && digitSum <= B) { sum += i; } } // 結果を出力する System.out.println(sum); } }
引用元
AtCoder Beginners Selectionの実施記録(Java) #AtCoder - Qiita
これはこれでまた全然違う。。なるほど、これは10で割ることで、桁ごとに分けているんですね。確かにこの方法ありですね。。こっちの方法でも実装できるようにしたいな!
解答例 3
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int A = sc.nextInt(); int B = sc.nextInt(); int[] listN = new int[N + 1]; for (int i = 1; i <= N; i++) { listN[i] = i; } int ans = 0; for (int i = 1; i <= N; i++) { int temp = listN[i]; int digitSum = 0; while (temp > 0) { digitSum = digitSum + temp % 10; temp = temp / 10; } if (digitSum >= A && digitSum <= B) { ans += listN[i]; } } System.out.println(ans); } }
Nまでの整数が含まれる配列を作ってしまい、その配列の要素それぞれがA以上B以下であれば、その配列の要素をアンサーに出していくという方法をとった!解答例2の亜種。
ではまた。