結果
| 問題 |
No.207 世界のなんとか
|
| コンテスト | |
| ユーザー |
velfare_nagata
|
| 提出日時 | 2016-10-04 20:18:59 |
| 言語 | Java (openjdk 23) |
| 結果 |
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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 WA * 3 TLE * 8 |
ソースコード
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);
}
}
}
velfare_nagata