結果
問題 | No.207 世界のなんとか |
ユーザー | velfare_nagata |
提出日時 | 2016-10-04 20:18:59 |
言語 | Java21 (openjdk 21) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,038 bytes |
コンパイル時間 | 4,065 ms |
コンパイル使用メモリ | 79,680 KB |
実行使用メモリ | 111,192 KB |
最終ジャッジ日時 | 2024-11-21 16:47:35 |
合計ジャッジ時間 | 59,958 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | TLE | - |
testcase_01 | TLE | - |
testcase_02 | TLE | - |
testcase_03 | TLE | - |
testcase_04 | TLE | - |
testcase_05 | TLE | - |
testcase_06 | AC | 145 ms
110,548 KB |
testcase_07 | AC | 115 ms
54,784 KB |
testcase_08 | AC | 126 ms
54,180 KB |
testcase_09 | AC | 133 ms
54,012 KB |
testcase_10 | WA | - |
testcase_11 | AC | 133 ms
54,220 KB |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | TLE | - |
testcase_15 | TLE | - |
testcase_16 | AC | 126 ms
53,892 KB |
testcase_17 | AC | 128 ms
54,008 KB |
testcase_18 | AC | 129 ms
111,192 KB |
ソースコード
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); } } }