じょん・どうのブログ

趣味と勉強したことを吐き出すブログです。主に競プロ、Unity、トレカをやってます!

ABC083B - Some Sumsを解いてきました。

 どうも、じょんです。今日はAtcoder Biginners SelectionのABC083B - Some Sumsを解いたので、このことついて書きます。前までC問題やってたのに何でBに戻ってるかというと、ABC159でB問題にすら時間をとられてしまったため、これはマズイと思って復習しようと思った次第であります。ちなみに、コーナーケース(例外のケース)を探すのが特に苦手な模様。

いつも通りのリンク:

https://atcoder.jp/contests/abs/tasks/abc083_b

以下、ネタバレ注意!

 

一応、問題文も載せときます。

1 以上 N 以下の整数のうち、10 進法での各桁の和が A 以上 B 以下であるものの総和を求めてください。 

 短いですなw

 さて、この問題を考える上で問題となるのは、どうやって各桁の和を比較していくのかでしょう(少なくとも僕にとってはこれが一番の問題だったんや)。もっといい方法があるかもしれませんが、僕が思いついたのは、今調べている数字を一回char(一文字だけのデータ)nの配列にして、それらを数のデータに戻して足し合わせて比較するというものです。どうやら割とよくでる考え方らしいので、慣れとかなきゃいけんな~。

 今回はスライド作るほど複雑なものでもないので、コード載せときます。 

  1. import java.util.*;
  2. import java.math.RoundingMode;
  3. import java.math.BigDecimal;
  4. public class Main{
  5. public static void main(String args){
  6. Scanner sc = new Scanner(System.in);
  7. int n = sc.nextInt();
  8. int a = sc.nextInt();
  9. int b = sc.nextInt();
  10. int ans = 0;
  11. for(int i = a; i <= n; i++) {
  12.  int sum = 0;
  13.  String now_str = String.valueOf(i);
  14.  char now_char = now_str.toCharArray();
  15.   for(int j = 0; j < now_char.length; j++) {
  16.   sum+=Integer.parseInt(String.valueOf(now_char[j]));
  17.   }
  18.   if(a <= sum && sum <= b) {
  19.    ans+=i;
  20.   }
  21.  }
  22.  System.out.println(ans);
  23.  }
  24. }

 では、今回はこれまで!さいなら~