第六章 數學問題 -------- 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、結果:
相關文章
- 負數的二進位制數問題
- stoi字串轉十進位制數越界問題字串
- SQL---2進位制問題SQL
- 基礎問題:進位制轉換
- 二進位制方式解決 power 問題
- Java中關於十進位制數取反問題解決Java
- 二進位制修復中文亂碼的問題
- BZOJ 1192 [HNOI2006]鬼谷子的錢袋:二進位制 砝碼稱重問題
- 關於Java中進位制轉換以及位運算問題Java
- KDE設區--C++的二進位制相容問題C++
- 解析MYSQL BINLOG二進位制格式(10)--問題解答MySql
- C++二進位制相容問題及解決方法C++
- 巧用 Base62 解決欄位太短的問題
- 第六章 數學問題 -------- 6.2【Nim遊戲】高僧鬥法遊戲
- 數字邏輯練習題-(二進位制/16進位制模擬)
- std::ofstream由二進位制流寫檔案的問題
- mysql修改二進位制log-bin報錯的問題MySql
- hibernate中blob大2進位制檔案的問題?
- 轉:13球稱重問題Java實現 收藏Java
- aix 6.1 ORA-04030 問題AI
- 二進位制函式JSON資料分類問題——機器學習函式JSON機器學習
- mysql5.7無法開啟二進位制日誌問題MySql
- 巧用分析函式循序漸進解決實際問題函式
- 洛谷題單指南-數學基礎問題-P1017 [NOIP2000 提高組] 進位制轉換
- Python處理十六進位制與二進位制轉換的問題——binascii自帶庫PythonASCII
- Session重疊問題學習(一)Session
- 第六章 數學問題 -------- 6.4 演算法必備求和公式演算法公式
- 牛客網測試題 把十六進位制數字轉換為十進位制數字
- Python print函式控制檯中文輸出16進位制問題Python函式
- poj1276 多重揹包問題(二進位制解決方案)
- zzulioj1893: 985的數學難題(二進位制計算)
- 演算法趣題:迴文十進位制數演算法
- 第六章 數學問題 -------- 6.5 歐幾里得演算法及其擴充套件演算法套件
- 技術問 - 進位制轉換
- oracle AS重啟問題Oracle
- git .gitignore 檔案 解決二進位制檔案衝突問題Git
- 十六進位制數轉十進位制
- 進度問題