第六章 數學問題 -------- 6.1【巧用進位制】天平稱重問題
注意程式輸出:+號代表放在左盤,-號放在右盤。
1、思路:
聯想二進位制列舉,這裡顯然其實是一種三進位制列舉。 這裡本質上是選或不選的問題,就是要將砝碼放左or放右即+or-表示式的問題。但是得到的三進位制值是由0 1 2組成,不好準確的表達是選還是不選的問題,於是我們可以想辦法把0 1 2變成1 0 -1。於是我們可以對三進位制數2進行進位操作,然後在減1,這樣就把三進位制全部變成由1 0 -1組成的了。再轉換成十進位制解決問題。
例如使用者輸入數字5,那麼它的三進製為1 2,現在對2加1減1,得到2 -1,然後在對2加1減1,得到1 -1 -1,這樣再轉換成十進位制為9-3-1。這樣成功解決問題。
2、程式碼:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class 天平稱重 {
public static void main(String[] args) {
//System.out.println(Integer.toString(1000000, 3));
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
// 轉成3進位制
final String x = Integer.toString(N, 3);
// 翻轉後轉成字元陣列,方便進行進位操作
char []arr = new StringBuilder(x).reverse().toString().toCharArray();
// 容器放處理之後的0 -1 1
List<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i]=='2') {
list.add(0, -1);// -1插在開頭
if (i==arr.length-1) {
list.add(0, 1);// 最後一個字元,進位
}else {
++arr[i+1]; // 否則,對下一個數字加1
}
}else if (arr[i]==3) {
list.add(0, 0);
if (i==arr.length-1) {
list.add(0, 1);
}else {
++arr[i+1];
}
}else {
// arr[i] - '0' 表達的是字元轉數字
list.add(0, arr[i] - '0'); // 為0或1的話,直接插入陣列開頭,
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
if (list.get(i)==1) {
sb.append("+").append((int)Math.pow(3, list.size()-i-1));
}
if (list.get(i)==-1) {
sb.append("-").append((int)Math.pow(3, list.size()-i-1));
}
}
System.out.println(sb.substring(1));
}
}
3、結果:
相關文章
- 第六章 數學問題 -------- 6.9 天平稱重問題【線性同餘方程】青蛙的約會
- 負數的二進位制數問題
- stoi字串轉十進位制數越界問題字串
- 基礎問題:進位制轉換
- 二進位制方式解決 power 問題
- 二進位制修復中文亂碼的問題
- #數位DP 計數問題
- 巧用 Base62 解決欄位太短的問題
- 關於Java中進位制轉換以及位運算問題Java
- 洛谷題單指南-數學基礎問題-P1017 [NOIP2000 提高組] 進位制轉換
- KDE設區--C++的二進位制相容問題C++
- 第六章 數學問題 -------- 6.12 素數及質因數分解
- Python處理十六進位制與二進位制轉換的問題——binascii自帶庫PythonASCII
- 二進位制函式JSON資料分類問題——機器學習函式JSON機器學習
- 第六章 數學問題 -------- 6.2【Nim遊戲】高僧鬥法遊戲
- 第六章 數學問題 -------- 6.10 特殊的同餘方程—逆元
- 【組合數學】遞推方程 ( 有重根遞推方程求解問題 | 問題提出 )
- Python print函式控制檯中文輸出16進位制問題Python函式
- 第六章 數學問題 -------- 6.14 【快速冪】斐波那契數列
- LeetCode數學問題(Python)LeetCodePython
- 第六章 數學問題 ----------6.13 素數的篩法(第十萬零二個素數)
- 第六章 數學問題 -------- 6.4 演算法必備求和公式演算法公式
- 第12節 巧用Event發現問題
- 牛客網測試題 把十六進位制數字轉換為十進位制數字
- 技術問 - 進位制轉換
- python 來做數學問題Python
- 進度問題
- 十進位制轉十六進位制(藍橋杯之前每日一題)每日一題
- MySQL 大欄位問題MySql
- hp 64位jdk問題JDK
- css 盒子溢位問題CSS
- 全排列價值(數學問題)
- 最大數問題
- 一個案例,教你巧用DMAIC解決“大問題”!AI
- PHP 字串強制轉換為數值問題PHP字串
- 第六章 數學問題 -------- 6.11【同餘方程組】POJ1006 生理週期
- 求資料流中的中位數問題
- [Java SE] 經典問題:超出Java Long型(8位元組/64位)的二進位制位元流資料如何進行大數的數值計算?Java