まず、分銅の重さを配列として用意しましょう。
そして、ループで重い方から調べていきます。
たとえば、調べる重さxが513gなら、まず一番重い分銅の512gと比べます。
xの方が大きい(か等しい)ので512gの分銅は使います。
そして、xから512を引きます。これでxは1です。
つぎに、256gとx(=1)を比べます。
分銅の方が大きいので256gは使いません。
このようにして、128,64,32,16,8,4,2,1と重い順に調べます。
最後に1を使うことが分かります。
つかうのは、1gと256gです。
ただし、使うと分かった時点で出力すると降順になってしまうので、多少工夫が必要です。
各自、考えてください(オィ)。
// //A006.java // import java.io.*; public class A006{ //分銅 private static final int[] weit={1,2,4,8,16,32,64,128,256,512}; //分銅を使うか(上と添え字が一致)(初期値はfalse) private static boolean[] use=new boolean[10]; public static void main(String[] args)throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //データ入力 int data=Integer.parseInt(br.readLine()); //分銅の重い方から調べる for(int i=0;i<weit.length;i++){ //残りの重さが今回の以上だったら if(data>=weit[weit.length-1-i]){ //残りの重さから今回の重さを引く data-=weit[weit.length-1-i]; //使ったフラグ設定 use[weit.length-1-i]=true; } } //使ったかを調べていく for(int i=0;i<use.length;i++){ //使われていたら if(use[i]){ //重さを出力(複数ある時のために半角スペースをつける) System.out.print(weit[i]+" "); } } } } |