#include<iostream> #include<math.h> #include<memory> #include<algorithm> using namespace std;
int t; //用例数 int w; //要称物体的重量 int lt[21],rt[21]; //左托盘和右托盘放的砝码。 int weight[21]; //将w分为3的次幂相加的形式 int l = 0,r = 0; //左盘和右盘所放砝码的个数
void cal(int n) //计算左盘和右盘个放那些砝码 { l = 0; r = 0; for(int i = 0;i <= n;i++) { if(weight[i] == 1) { rt[r++] = i; } else if(weight[i] == 2) { lt[l++] = i; weight[i+1]++; } else if(weight[i] == 3) { weight[i+1]++; } } } void solve() { int i = 0; while(w) //将w分解为3的次幂相加的形式 { weight[i] = w%3; w /= 3; i++; } cal(i); sort(lt,lt + l); sort(rt,rt + 1);
} void output() { int i,j; int flagl = 0; int flagr = 0; if(l != 0) { flagl = 1; cout<<(int)pow(3.0,lt[0]); } for(i = 1;i < l;i++) { cout<<","<<(int)pow(3.0,lt[i]); } if(!flagl) cout<<"empty"; cout<<" "; if(r != 0) { flagr = 1; cout<<(int)pow(3.0,rt[0]); } for(j = 1;j < r;j++) { cout<<","<<(int)pow(3.0,rt[j]); } if(!flagr) cout<<"empty"; cout<<endl;
} int main() { cin>>t; while(t--) { cin>>w; memset(weight,0,sizeof(weight)); solve(); output(); } system("pause"); return 0; }
poj1702解题报告
最新推荐文章于 2019-05-16 21:35:55 发布