天秤があります。10個の分銅もあります。それぞれ1,2,4,8,16,32,64,128,256,512gです。
このとき、左の皿に載せる物体の重さが与えられるので、天秤を釣り合わせるように右に載せるべき分銅の重さを軽い順に空白で区切って出力しなさい。
ただし、左の皿に載る物体の重さはすべての分銅の重さ1023gよりも小さいものとする。
分銅の重さは2のn乗。
左の皿に載せる物体の重さ(正の整数)
右の皿に載せる分銅(昇順)空白区切り
123
1 2 8 16 32 64
問題ではヒントとして、分銅の重さが2のn乗になっていることが書かれています。
よって、この問題では入力された整数を下から1ビットずつ取り出してそこのビットの重みを出力すればいいことになります。
#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; }
実際の天秤では左右の皿におもりを載せることが出来るのでもっと少ないおもりの数で重さが量れます。