結果
問題 | No.207 世界のなんとか |
ユーザー | velfare_nagata |
提出日時 | 2016-10-04 20:18:59 |
言語 | Java21 (openjdk 21) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,038 bytes |
コンパイル時間 | 4,756 ms |
コンパイル使用メモリ | 81,952 KB |
実行使用メモリ | 70,612 KB |
最終ジャッジ日時 | 2024-05-01 12:25:58 |
合計ジャッジ時間 | 16,282 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | TLE | - |
testcase_01 | -- | - |
testcase_02 | -- | - |
testcase_03 | -- | - |
testcase_04 | -- | - |
testcase_05 | -- | - |
testcase_06 | -- | - |
testcase_07 | -- | - |
testcase_08 | -- | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
testcase_11 | -- | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
ソースコード
package yukicoder; import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Answer { /** * A以上B以下の整数のうち、3の倍数および3の付く数を、小さい順に出力してください。 * * なお、「3の付く数」とは、10進数表記にした時、少なくとも1つの桁が3であるような数のことです。 */ public static void main(String[] args) { // パラメータ取得 Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); sc.close(); /* int a = 0; int b = 100; */ // 引数の桁数取得 int digitA = 0; for (int i = a; i > 0; i /= 10) digitA++; int digitB = 0; for (int i = b; i > 0; i /= 10) digitB++; // 有効範囲内の3のつく数と3の倍数を管理するテーブルを作成する ArrayList<Integer> numsWithThree = new ArrayList<Integer>(); // 3のつく数を管理 for (int i = 0; i < digitB; i++) { int upperDigit = digitB - i; int upperDigitFlag = 1; for (int j = 0; j < upperDigit - 1; j++) upperDigitFlag *= 10; int lowerDigit = i; int lowerDigitFlag = 1; for (int k = 0; k < lowerDigit; k++) lowerDigitFlag *= 10; int upperStart = a / (lowerDigitFlag * 10); int upperEnd = b / (lowerDigitFlag * 10); if (upperDigitFlag == 1) { upperStart = 0; upperEnd = 1; } int lowerEnd = lowerDigitFlag; for (int upper = upperStart; upper < upperEnd; upper++) { for (int lower = 0; lower < lowerEnd; lower++) { int target = ((upper * (lowerDigitFlag * 10)) + (3 * lowerDigitFlag) + lower); if( target > b) break; if (!numsWithThree.contains(target)) numsWithThree.add(target); } } } // 3の倍数を管理 for (int i = 3 * (a / 3) + 3; i <= 3 * (b / 3); i += 3) if (!numsWithThree.contains(i)) numsWithThree.add(i); // ソートして全部出力 Collections.sort(numsWithThree); for(int num : numsWithThree) { System.out.println(num); } } }