JOJ2236:Balance and Poise

来源:互联网 发布:赵泓霖免费网络公开课 编辑:程序博客网 时间:2024/05/21 11:14

传送门:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2236

思路:

n只要能整除3就不断的除3,同时用sum累计除的那些3乘起来多少,这样保证n * sum是原始n,如果n不能整除3了分量中情况,1.余数是1,说明可以从其中拿走一个,所以右盘增加当前sum,n--;如果余数是2,所明需要补足一个,所以左盘增加当前sum,n++。

代码:

#include <iostream>#include <cstdio>using namespace std;int main(){    int n;    int left[50], right[50];    while (scanf("%d", &n) != EOF)    {        int sum = 1, l = 0, r = 0;        while (n)        {            while (n % 3 == 0)                n /= 3, sum *= 3;            if (n % 3 == 1)                right[r++] = sum, n--;            else            if (n % 3 == 2)                left[l++] = sum, n++;        }        if (l == 0)            cout << "0 left, ";        else        {            for (int i = 0; i < l; ++i)                cout << left[i] << " ";            cout << "left, ";        }        for (int i = 0; i < r; ++i)            cout << right[i] << " ";        cout << "right." << endl;    }    return 0;}


原创粉丝点击