java 3の倍数と3の付く数字を表示、数値で判定バージョン

Javaで、3の倍数と3の付く数字を表示してみました。数値で判定バージョンです。

AIZU ONLINE JUDGE: Programming Challenge

f:id:ts0818:20190104202840p:plain

⇧  こちらのサイトの問題ですね。 

 

そんでは、レッツ~トライ。

 

3の倍数と3の付く数値を表示

問題的には、C++ソースコードを、Javaに置き換えるらしいんだけど、C++のコードとか分からんっちゅう話ですね。 

f:id:ts0818:20190104201117p:plain

コード的には、こんな感じになりました。

package aizu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestStructure {

  public static void main(String[] args) throws IOException {
    // TODO 自動生成されたメソッド・スタブ
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    int inputInt;

    inputInt = Integer.parseInt(input.readLine());

    int x1, x2, x3;

    for (int i = 1; i <= inputInt; i++) {
      x1 = i / 10; // 10の位が3になる数値を判定
      x2 = i / 100; // 100の位が3になる数値を判定
      x3 = i / 1000; // 1000の位が3になる数値を判定

      if (i % 3 == 0 || i % 10 == 3 || x1 % 10 == 3 || x2 % 10 == 3 || x3 % 10 == 3) {

        System.out.print(" " + i);
      }
    }
    System.out.println();
  }
}

f:id:ts0818:20190104201853p:plain

提出用のソースコードは、

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestStructure {

  public static void main(String[] args) throws IOException {
    // TODO 自動生成されたメソッド・スタブ
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    int inputInt;

    inputInt = Integer.parseInt(input.readLine());

    int x1, x2, x3;

    for (int i = 1; i <= inputInt; i++) {
      x1 = i / 10; 
      x2 = i / 100; 
      x3 = i / 1000; 

      if (i % 3 == 0 || i % 10 == 3 || x1 % 10 == 3 || x2 % 10 == 3 || x3 % 10 == 3) {

        System.out.print(" " + i);
      }
    }
    System.out.println();
  }
}

 

f:id:ts0818:20190104202501p:plain

f:id:ts0818:20190104202539p:plain

⇧  一応、OKということらしい。

そして、問題はまだまだ残ってますね...少しづつ取り組んでいきますか

f:id:ts0818:20190104203909p:plain

 

ちなみに、

okwave.jp

⇧  上記サイト様によりますと、

また'count / 10 == 3'ですが、これは10で割ったときの商が3であるような数値がどうかを判定しているのですが、こちらの条件式は1つ注意する点があります。
例としてcount=38の場合を挙げてみます。
count=38の場合、'count / 10'の計算結果は3.8になるように予想されますが、実際には'int型の数値 / int型の数値'の計算結果はint型になります。
このとき小数点以下の部分は切り捨てられます。
つまり、この計算結果は3.8でなく3になります。

上記の理由で'count / 10 == 3'に該当する数値は、30,31,32,…になります。

ということらしく、3桁の数値の場合は、「count / 100」、 4桁の数値の場合は、「count / 1000」の値を調べていけば良いってことになるかと。

 

なかなか、このへんの発想は思いつかなかったですかね...勉強していかねばですね。

今回はこのへんで。