Room Numbers of a Hospital [AOJ0208]
Room Numbers of a Hospital | Aizu Online Judge
いかにも競プロで出題されそうな問題だなと思いました。
import static java.lang.System.*; import java.util.*; public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { while(true) { int n = sc.nextInt(); if (n == 0) break; String s = Integer.toOctalString(n); s = s.replace("7","9").replace("6","8").replace("5","7").replace("4","5"); out.println(s); } } }
この問題のキモは、新部屋番号が{0,1,2,3,5,7,8,9}のみで構成される8進数(に類するもの)になっているということです。したがって、旧部屋番号を8進数に変換し、結果を上記の8つの数字に対応させていけばよいです。
・4 -> 5
・5 -> 7
・6 -> 8
・7 -> 9
ここで気をつけなければならないことが一つ。
結果を数字の小さい順に変換していった場合、4が5に変換され、5が6に変換され……といったように重複して変換されてしまう可能性があるので、大きい順に変換する必要があります。