天平称物体

来源:互联网 发布:阿里云客服能赚钱吗 编辑:程序博客网 时间:2024/04/28 22:27
问题:给你一个天平,N个砝码(N=32).第i个砝码的质量是3^ (i-1)。 给你一个32位内的整数质量的物体,请问能否把质量为M的物体以及若干个砝码放在天平两边,达到平衡,如果可以的话,请指出选择的砝码。 解法描述:把M表示成三进制表达式,然后调整系数,使其系数是(-1,0,1)。-1表示放在与M同侧,0表示不放,1表示放在与M异侧。 程序如下: #include using namespace std; void to3mod(char* array, int m){ int i = 0; while(m >= 3){ array[i++] = m % 3; m = m / 3; } array[i] = m; } void change(char* array){ for(int i=0; i<32; i++){ if(array[i] == 2){ array[i] = -1; array[i+1] ++; }else if(array[i] == 3){ array[i] == 0; array[i+1] ++; } } } void print(char* array){ for(int i=0; i<32; i++){ cout << array[i]+0 << " ,"; } cout << endl; } int main() { char array[32]; memset(array, 0, 32); print(array); to3mod(array, 15); print(array); change(array); print(array); return 0; }