平衡三进制(可推广到n进制)
来源:互联网 发布:linux分区方案 知乎 编辑:程序博客网 时间:2024/04/30 09:47
题目:
给定1,3,9,27,81这5个数,求1-121之间的任意一个数字用这5个数表示的方法,大的数字在前。
例如:
输入 19 输出:27-9+1
输入 121 输出 : 81+27+9+3+1
ps.题目是华为机试题,笔者当时由于机试时间所限,采用了打表法,这也算以空间换时间的一种。但方法比较low,回来网上查找了一下,是关于平衡进制的问题。
下面用Python和Java分别实现:
# coding: utf-8# Python 2.7# author: Wicle Qiandef translate(n): # translate to 3-radix a = [] while n: a.append(n % 3) n /= 3 a.append(0) # prepare to next step # 3-radix translate to balanced 3-radix # 0,1,2 => 0,1,-1,1, 2*3^n = 3^(n+1)-3^n for i in range(len(a)-1): if a[i] == 2: a[i] = -1 a[i+1] += 1 # output for i in range(len(a)-1,-1,-1): print("3^%d: %+d" %(i,a[i]))while True: try: n = int(raw_input()) translate(n) except: break
// javaimport java.util.ArrayList;import java.util.Scanner;public class BalancedThreeRadix{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); translateToThreeRadix(n); } sc.close(); } private static void translateToThreeRadix(int n){ ArrayList<Integer> a = new ArrayList<Integer>(); # translate to 3-radix while(n != 0){ a.add(n % 3); n /= 3; } a.add(0); # to balanced-3-radix for(int i = 0; i < a.size()-1; i++){ if(a.get(i) == 2){ a.set(i,-1); a.set(i+1,a.get(i+1)+1); } } # output StringBuilder sb = new StringBuilder(); for(int i = a.size()-1; i >= 0; i--){ if(a.get(i) == 1){ if(sb.length() == 0){ sb.append((int)Math.pow(3,i)); }else{ sb.append("+"+(int)(Math.pow(3,i))); } }else if( a.get(i) == 0){ continue; }else{ sb.continue("-"+(int)(Math.pow(3,i))); } } System.out.println(sb); }}
0 0
- 平衡三进制(可推广到n进制)
- 由八皇后问题到n皇后的推广
- 八皇后问题,Java实现,可推广解决N皇后问题
- 让一个Activity在开机后自动显示(可推广到开机自启服务)
- zjut 1740 Find x 从此题推广到求一个数的N次方的小数精度问题
- 开发者可通过重要人物推广游戏
- 平衡三进制
- 平衡三进制
- 用c++高精度的计算π的值,可精确到n位
- 平衡树?可并堆?线段树!
- 八数码问题有解条件&推广N×N,N×N×N
- 数据结构.平衡二叉树.从二叉排序树到平衡二叉树
- 由国内到国外:软件推广成功之路
- 由国内到国外:软件推广成功之路
- 从网络技术到网络推广的道路
- 由国内到国外:软件推广成功之路
- 树遍历之推广到图遍历
- 从三位数推广到四位数
- 第十四章 上机练习1
- XML04-DOM4J解析xml文件
- Android中接口的回调,Activity或Fragment与普通类之间的互相调用
- PHP codeigniter框架
- Java线程总结(六):并发包------线程同步Lock
- 平衡三进制(可推广到n进制)
- 22. Generate Parentheses
- 使用glide和volley创建自己的网络图库
- jdbc底层封装
- 包含cv::Mat和cv::Rect的人眼ROI结构体在内存中的分布
- [LeetCode]3Sum
- nodejs搭建一个简单的httpserver
- 插播-管理书目
- CSS3的calc()使用