yinyin 笔试题
来源:互联网 发布:免费程序化交易软件 编辑:程序博客网 时间:2024/05/01 03:45
今天笔试遇到了一道题目 天平左边有一个重量为x的物体,还有1,3,9....3^n这n+1个砝码,问怎么将砝码放到天平两边使得平衡
每个砝码只有一个,有的可以不用
开始给了一个具体的x让算,那样具体一点还好算,后来给的x,不定量的砝码,想用递归,回溯,但是感觉很难写
后来想到砝码都是3的整数次幂,想能不能用三进制去做,结果证明果然有效
具体思路如下
将x转化成三进制放到数组a[N],将所有的砝码放到数组b[M]中
从低往高一次比较对应位的数值,三进制肯定只有0,1,2三种情况,因为有些砝码可能要放到左边,所以左边还要加上相应的砝码,可能产生进位,于是设进位标识为takeover
这样三个数字加上是否进位,总共六种情况
因为b数组都为1
当a[i]==0&&takeover=false
也就是没有进位的时候,此时要保证该位相等需要将右边的这个权值的砝码拿掉,也就是将b[j]=0
当a[i]==0&&takeover=true
也就是有进位的时候,此时不变
当a[i]==1&&takeover=false 也不需要改变
当a[i]==1&&takeover=true 此时a[i]=2,将b[j]对应的那个砝码给a,那么a[i]=0, b[j]=0, takeover=true
当a[i]==2&&takeover=false 同上,也是b[j]对应的那个砝码给a,那么a[i]=0, b[j]=0, takeover=true
当a[i]==2&&takeover=true 此时a[i]=0, 将b中对应砝码去掉即可,也就是b[j]=0
当某个数组先结束时,此过程退出,如果a先结束,那么对应b的高位权值的砝码都不用加了,如果b先结束,说明x重量超过所有砝码的重量,即使加上前面去掉的那些,也无济于事。
- yinyin 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- 笔试题
- iBATIS入门之一:环境和配置文件
- struts2拦截器+过滤器
- 75道逻辑思维题
- Android开发之屏幕大小自适应
- perl应用:DNA序列翻译(下):从fasta格式中读取序列,然后输出蛋白质序列,以及fasta格式的介绍
- yinyin 笔试题
- 如何判断点P是否在三角形ABC内?
- 优秀的女人受冷落
- 网页标签的优化【鸡蛋】
- oracle基础知识五
- 模拟退火算法的个人理解
- Sort using
- struts2的一些笔记
- 编写简单java程序