[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2004年予選>6問目

6問目(2進数・ビット演算)

問題

天秤があります。10個の分銅もあります。それぞれ1,2,4,8,16,32,64,128,256,512gです。

このとき、左の皿に載せる物体の重さが与えられるので、天秤を釣り合わせるように右に載せるべき分銅の重さを軽い順に空白で区切って出力しなさい。

ただし、左の皿に載る物体の重さはすべての分銅の重さ1023gよりも小さいものとする。

ヒント

分銅の重さは2のn乗。

入力

左の皿に載せる物体の重さ(正の整数)

出力

右の皿に載せる分銅(昇順)空白区切り

入力例

123

出力例

1 2 8 16 32 64

解き方例

問題ではヒントとして、分銅の重さが2のn乗になっていることが書かれています。

よって、この問題では入力された整数を下から1ビットずつ取り出してそこのビットの重みを出力すればいいことになります。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>

int main(){
    int in,out;

    scanf("%d",&in);

    out=1;

    //for( ; in!=0; n/=2)
    for(;in;in>>=1){
        //if(in%2)
        if(in&1){
            printf("%d ",out);
        }
        out<<=1;//out*2;
    }
    printf("\n");

    return 0;
}


その他

実際の天秤では左右の皿におもりを載せることが出来るのでもっと少ないおもりの数で重さが量れます。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-8-23
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2004年予選>6問目