zoukankan      html  css  js  c++  java
  • POJ 1702 Eva's Balance (数论,平衡三进制)

    题意:

           给你一个天平,和一些砝码,只是这些砝码有点特殊,它的重量是1,3,9,27,……3^n。让你把一些砝码和一个给定的重量的物体放在左边,另一些砝码放在右边,使天平平衡(每个砝码最多用一个),你会怎么做呢?这是一个很有趣的事,不是吗?这就是用平衡三进制解决最好的一个例子:

          比如我们假设这个物体的重量是20,那么我们可以这样做。首先我们把20(十进制)转化为三进制(202)(其实是砝码的三种状态,放左边,放右边,不放),然后我们按照一定的规则,把这些数转化成0,1,-1表示。规则就是:
          数的每一位只有三种状态,且,变换后是原来的值,只是三进制的表示方式改变了
          傻瓜式理解就是在三进制的数位上
          1.该为为2,改为-1,高一位加1(2=3-1的理解)
          2.该为为3,自然要进1,改为改为0;
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    int main()
    {
        int N;
        int i,j,k,n,ni;
        int a[25];
        scanf("%d",&N);
        while(N--)
        {
            memset(a,0,sizeof(a));//数组初始化为0;
            scanf("%d",&n);
            ni=n;
            for(i=0;ni;i++)//转换为三进制
            {
                a[i]=ni%3;
                ni=(ni-a[i])/3;     
            }
            for(j=0;j<i;j++)//三进制内运算(数组各元素只能为-1,0,1)
            {
                if(a[j]==2)
                {
                    a[j+1]++;
                    a[j]=-1;
                }
                else if(a[j]==3)
                {
                    a[j+1]++;
                    a[j]=0;
                }
            }
            int flag1=0,flag2=0;//标记输出
            for(k=0;k<=i;k++)
            {
                if(a[k]==-1)
                {
                    if(flag1)printf(",");
                    flag1=1;
                    printf("%.0lf",pow((double)3,(double)k));
                }
    
            }
            if(flag1==0)printf("empty");//左边无需加砝码,输出empty
            printf(" ");
            for(k=0;k<=i;k++)
            {
    
                if(a[k]==1)
                {
                    if(flag2)printf(",");
                    flag2=1;
                    printf("%.0lf",pow((double)3,(double)k));
                }
            }
            printf("\n");
        }
        return 0;
    }
    注意:
    1.数组初始化
    2.pow((double)3,(double)k
  • 相关阅读:
    Python全栈开发——装饰器
    Python全栈开发——类
    Python全栈开发——Json & pickle & shelve & sys模块
    Python全栈开发——正则表达式
    实验3- 熟悉常用的 HBase 操作
    Hbase PleaseHoldException错误
    HDFS 中文件操作的错误集锦
    ubuntu在虚拟机下的安装 ~~~ Hadoop的安装及配置 ~~~ Hdfs中eclipse的安装
    假期周进度报告---08
    假期周进度报告---07
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3003595.html
Copyright © 2011-2022 走看看