【蓝桥杯】【Java】天平称重(巧用进制)

在这里插入图片描述
如果是二进制的话就直接用01来表示,天平秤的砝码有没有被使用过。
但是这是三的倍数,变相使用三进制。012都可存在,故没有直接的办法去判断能否使用。因为根据题意可知道不能重复使用。

思路:

在这里插入图片描述

代码:

package 题解;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class _01_天平称重 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		
		String str = Integer.toString(n, 3);
		char[] arr = str.toCharArray();
		
		System.out.println(str);
		int len = str.length();
		List list = new ArrayList();
		
		
		// 例如是 “221” 需要变成1 0 -1 1。
		for (int i = len-1; i >= 0; i--) {
			if(arr[i] == '1'){
				list.add(0,1);
			} else if (arr[i] == '2'){
				list.add(0,-1);
				if(i == 0){//判断是不是在数组的开始。
					list.add(0, 1);
				} else {
					arr[i-1]++;
				}
			} else if(arr[i] == '3'){
				list.add(0,0);
				if(i == 0){
					list.add(0, 1);
				} else {
					arr[i-1]++;
				}
			}
		}
		System.out.println(list);
		
		//两种方法实现最后的输出。
		
	/*	
		for (int i = 0; i < list.size(); i++) {
			if(list.get(i).equals(1)){
				System.out.print((int)Math.pow(3, list.size()-1-i)+" ");
			} else if(list.get(i).equals(-1)){
				System.out.print("-"+(int)Math.pow(3, list.size()-1-i)+" ");
			} 
		}
	*/	
		
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < list.size(); i++) {
			if(list.get(i).equals(1)){
				sb.append((int)Math.pow(3, list.size()-1-i)+" ");
			} else if(list.get(i).equals(-1)){
				sb.append('-').append((int)Math.pow(3, list.size()-1-i)+" ");
			} 
		}
		System.out.println(sb.toString());
	}
}

发布了81 篇原创文章 · 获赞 13 · 访问量 2372

猜你喜欢

转载自blog.csdn.net/alovelypeach/article/details/104482491