Javaで、3の倍数と3の付く数字を表示してみました。数値で判定バージョンです。
・AIZU ONLINE JUDGE: Programming Challenge
⇧ こちらのサイトの問題ですね。
そんでは、レッツ~トライ。
3の倍数と3の付く数値を表示
問題的には、C++のソースコードを、Javaに置き換えるらしいんだけど、C++のコードとか分からんっちゅう話ですね。
コード的には、こんな感じになりました。
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(); } }
提出用のソースコードは、
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(); } }
⇧ 一応、OKということらしい。
そして、問題はまだまだ残ってますね...少しづつ取り組んでいきますか
ちなみに、
⇧ 上記サイト様によりますと、
また'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」の値を調べていけば良いってことになるかと。
なかなか、このへんの発想は思いつかなかったですかね...勉強していかねばですね。
今回はこのへんで。