您的位置:首页 > 其它

poj 1702 模拟(用三进制砝码测量物体质量)

2015-01-30 20:21 363 查看
题意:给定20个砝码,重量分别为3^i(i=0~19)。给定一个物品,质量为W(1 <= W <= (3^20-1)/2),放在天平左盘。左右皆可放砝码,如何放能使天平平衡。

思路:将物品的重量转化为三进制,如果某一位为0或者1则不需处理、为2便在此位加上相应的3的幂将2消除,并进位。最终得到的每位都为0或者1的数即为最终天平右端的重量。

#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 25
int n,T;
int num
,res
;
void print(int s
,int len){
int i,flag = 0;
for(i = 0;i<=len;i++){
if(!flag && s[i]){
printf("%d",(int)pow(3,i));
flag = 1;
}
else if(s[i])
printf(",%d",(int)pow(3,i));
}
if(!flag)
printf("empty");
}
int main(){
scanf("%d",&T);
while(T--){
int i,len = 0;
memset(num, 0, sizeof(num));
memset(res,0, sizeof(res));
scanf("%d",&n);
while(n){       //将输入数字转化为3进制
num[len++] = n%3;
n /= 3;
}
for(i = 0;i<len;i++)
if(num[i] >= 2){//出现2(或3)
if(num[i] == 2)//此位为2表示在这位上加上一个相应的3的幂
res[i] = 1;
num[i] = 0;
num[i+1] ++;
}
print(res,len);
printf(" ");
print(num,len);//num数组恰为最终天平两端的重量
putchar('\n');
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: