AOJ0233 Book Arrangement
問題リンク Book Arrangement
- 解法
マイナス10進数を下の桁から順に求める方針で解きます。
残念なことに、これを解いたのは結構前でソースが何をしてるんだかあまり思い出せません、なので記憶の片隅にあるアイデアだけ述べさせてください。
ある桁kで作ることができるのが正か負かは簡単に分かります。1の位だったら正、10の位だったら負、という感じです。
ここで、10進数において、桁kが数xだったとします。このとき、桁kで作ることができるのが正ならば、xがそのまま桁kの数字になります。負の場合、それは10-xという数になります。この場合、次の桁から値を1つ借りてくる形になるので、k+1桁目に必要な数字を1増やします。
みたいな感じで解きました。こういうアドホックな実装問題は、解いた日にすぐ記事にしないと取り返しがつきませんね・・・orz
- ソース
import java.util.Scanner; //Book Arrangement public class AOJ0233 { void run(){ Scanner sc = new Scanner(System.in); for(;;){ long x = sc.nextLong(); if(x==0)break; boolean sign = x>0; String res = ""; x = Math.abs(x); boolean k = true; while(x>0){ int t = (int) (x%10); if(sign==k)res =t + res; else{ res = (10-t)%10+res; if(t!=0)x+=10; } k=!k; x/=10; } System.out.println(res); } } public static void main(String[] args) { new AOJ0233().run(); } }