pku(1702)Eva's Balance

作者在 2008-04-01 12:02:56 发布以下内容

这是一道不错的数学题,开始的时候就只想到于三进制有关系,由于还有一个最优化的问题……开始还以为需要用到深搜的策略。

 

但是正确的解法却也是因为三进制才没有使用深搜的策略。

以三进制表示一个数:

   1.如果数位上为1,则应该在右侧放上一个权值。

    2.如果数位上为2,则该在左侧放上一个权值。

    3.如果位数上为0,则什么都不需要做。

 

源代码:

 

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int main()
{
    int n;
    cin >>n;
    while(n--)
    {
              int a;
              vector< int >  left, right;
              cin >>a;
              int t=0;
              while(a)
              {
                      int temp;
                      temp=a%3;
                      if(temp==1)
                      {
                      right.push_back(int(pow(3.0,t)));
                      a/=3;
                      }
                      else if(temp==2)
                      {
                           left.push_back(int(pow(3.0,t)));
                           a=a+3;
                           a/=3;       
                                   }
                                   else
                                       a/=3;
                                   t++;
                      }
              if(left.size()==0)
              cout<<"empty"<<" ";
              else
              {    
              for(int i=0;i<left.size()-1;i++)
              cout<<left[i]<<",";
              cout<<left[left.size()-1]<<" ";
              }
              if(right.size()==0)
              cout<<"empty"<<endl;
              else
              {
              for(int i=0;i<right.size()-1;i++)
              cout<<right[i]<<",";
              cout<<right[right.size()-1]<<endl;
              }
              }
              return 0;
             
}

acm | 阅读 2853 次
文章评论,共0条
游客请输入验证码
浏览260763次