伊娃的平衡

来源:互联网 发布:英国人用淘宝 编辑:程序博客网 时间:2024/04/29 14:53

Description

Eva has a balance with 20 poises. The weights of the poises are 1, 3, 9, 27,...,3^19. Eva asserts that she has a way to measure any object whose weight is an integer from 1 to (3^20-1)/2. Assuming that Eva has placed an object with the weight in this range on the left tray of the balance, your task is to place the proper poises on the proper trays so as to weigh the object out.

Input

The first line is an integer T (1 <= T <= 20), which shows the number of the test cases. Each of the following T lines contains an integer W (1 <= W <= (3^20-1)/2), expressing the weight of an object.

Output

For each test case print a line, showing the weights of the poises on the left tray and the right tray. Use a space to separate the left tray and the right tray. The poises on the same tray are arranged in the increasing order, and a comma separates every two of them. If there is no poise on the tray, output "empty".

Sample Input

39520

Sample Output

empty 91,3 91,9 3,27
个人理解
将输入的数化为三进制,然后再进行判断
代码
#include<stdio.h>#include<math.h>#include<string.h>#define N 21void l(int a[N],int m){    int i,j=0;    for(i=0;i<=m;i++)    {         if(!j&&a[i])        {            printf("%d",(int)pow(3.0,i*1.0));            j=1;        }        else if(a[i])        {            printf(",%d",(int)pow(3.0,i*1.0));        }    }    if(!j)       printf("empty");}int main(){    int n,W,Right[N],Left[N];    scanf("%d",&n);    while(n--)    {        int i,m=0;        memset(Right,0,sizeof(Right));        memset(Left,0,sizeof(Left));        scanf("%d",&W);        while(W)        {            Right[m++]=W%3;            W/=3;        }        for(i=0;i<m;i++)        {            if(Right[i]>=2)            {                if(Right[i]==2)                {                    Left[i]=1;                }                Right[i]=0;                Right[i+1]++;            }        }        l(Left,m);        printf(" ");        l(Right,m);        printf("\n");    }    return 0;}