藍橋杯 ——2的次冪表示
問題描述
任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。
將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0
現在約定冪次用括號來表示,即a^b表示為a(b)
此時,137可表示為:2(7)+2(3)+2(0)
進一步:7=2^2+2+2^0 (2^1用2表示)
3=2+2^0
所以最後137可表示為:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=2^10+2^8+2^5+2+1
所以1315最後可表示為:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
輸入格式
正整數(1<=n<=20000)
輸出格式
符合約定的n的0,2表示(在表示中不能有空格)
樣例輸入
137
樣例輸出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
樣例輸入
1315
樣例輸出
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
用遞迴實現會比較簡單,可以一邊遞迴一邊輸出
思路:
觀察樣例:1315=2^10+2^8+2^5+2+1
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
先找出整數n的最大2次冪k,然後令n=n-2^k,繼續計算n的最大2次冪,直到n=0或n=1為止,此處可以用遞迴實現。另外在遞迴的同時進行列印時需要注意2^2=2(2),2^1=2,2^0=2(0),括號的列印需要條件判斷。
import java.util.Scanner;
public class Test {
public int calculate(int n) {// 計算整數n的最大2次冪
int i = -1;
while (Math.pow(2, i) <= n) {
i++;
}
i--;
return i;
}
public void print(int n) {
switch (n) {
case 0:
System.out.print("0");//n=0時,2(0)
return;
case 1:
System.out.print("2");//n=1時,2(1) = 2,括號的顯示與n獨立
return;
case 2:
System.out.print("2");//n=2時,2(2)
return;
default:
break;
}
int k = calculate(n);
if (k >= 2 || k == 0) {//2(2),2(1),2(0)中,2(1)直接用2替換,不需要新增2(),直接列印
System.out.print("2(");
print(k);
System.out.print(")");
} else {
print(k);
}
int m = n - (int) Math.pow(2, k);
while (m > 0) {
int t = calculate(m);
System.out.print("+");
if (t >= 2 || t == 0) {//條件判斷的理由同上
System.out.print("2(");
print(t);
System.out.print(")");
} else {
print(t);
}
m = m - (int) Math.pow(2, t);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Test t = new Test();
t.print(n);
}
}
相關推薦
算法訓練 2的次冪表示(藍橋杯C++寫法)
ostream ali font 我們 DC ace 找到 進制 就是 問題描述 任何一個正整數都可以用2進制表示,例如:137的2進制表示為10001001。 將這種2進制表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^
藍橋杯 演算法訓練 ALGO-95 2的次冪表示
演算法訓練 2的次冪表示 時間限制:1.0s 記憶體限制:512.0MB 問題描述 任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。 將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=27+23+2^0 現
藍橋杯 演算法訓練 2的次冪表示
演算法訓練 2的次冪表示 問題描述 任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。 將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下
藍橋杯訓練:2的次冪表示(遞迴)
程式碼:ALGO-95 題目名稱:2的次冪表示 關鍵字: 上傳日期:2014-12-29 資源限制:時間限制:1.0s 記憶體限制:512.0MB 問題描述 任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。
藍橋杯 ——2的次冪表示
問題描述 任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。 將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0 現在約定冪次用括號來表示,即a^b表示為a(
藍橋杯-演算法訓練 2的次冪表示
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 提示 用遞迴實現會比較簡單,可以一邊遞迴一邊輸出#include <cstdio> #include <iostream> #include <cstring> #include
藍橋杯演算法訓練——2的次冪表示 (遞迴)
問題描述 任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。 將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3
藍橋杯 2的次冪表示
一遍遞迴一遍輸出#include <iostream> using namespace std; string Binary(int n){ string s=""; while(n){ s+=('0'+n%2); n/=2; } re
2016藍橋杯假期任務之《2的次冪表示 》
問題描述 任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。 將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0 現在約定冪次用括號來表示,即a^b表示為a(b) 此時,1
藍橋杯--演算法訓練 2的次冪表示
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 提示 用遞迴實現會比較簡單,可以一邊遞迴一邊輸出 思路:先把輸入的數轉化成二進位制並記錄1出現的次數與位置。使用遞迴求解. 遞迴出口:當1出現的位置為0時輸出2(0). 當1出現的位置為1時輸出2,當1出現的位置為
藍橋杯 2的n次冪表示
任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。 將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0 現在約定冪次用括號來表示,即a^b表示為a(b) 此時,137可表示為:2(7)+2(3)+2(0) 進一步
藍橋杯 演算法訓練 2的次冪表示 java
藍橋杯 演算法訓練 2的次冪表示 java 藍橋杯 演算法訓練 2的次冪表示 java 題目說明 輸入輸出 輸入格式 輸出格式 樣例輸入 樣例輸出 樣例輸入 樣例輸出 提示 思路 程式碼 題目說明 任何一個正整數都可
藍橋杯——二的次冪表示
問題描述 任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。 將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0 現在約定冪次用括號來表示,即a^b表示為a(b) 此
2的次冪表示 (遞迴)
思路:這遞迴遞的我頭都暈了,先貼個偽遞迴吧 AC程式碼: #include <cstdio> #include <cstring> #include <algor
藍橋杯—ALGO-12 冪方分解
mat break 要求 post 括號 std sin using 字符 問題描述 任何一個正整數都可以用2的冪次方表示。例如: 137=27+23+20 同時約定方次用括號來表示,即ab 可表示為a(b)。 由此可知,137可表示為: 2(7)+2(3)+2
關於二進位制的次冪表示
演算法訓練 2的次冪表示 時間限制:1.0s 記憶體限制:512.0MB 問題描述 任何一個正整數都可以
HashMap 容量為2次冪的原因
我們都知道 hashmap 的底層是一個數組加連結串列的結構,當向其中新增一個元素的時候,需要根據key的hash值,去確定其在陣列中的具體位置。 看原始碼,我們可以發現,確定陣列位置的實現是 i=(n-1)& hash,其中 n 代表陣列的長度,即map的容量。 當n為2的冪
求最接近cap的2次冪(tableSizeFor函式的實現)
不比cap小的2次冪(HashMap中的tableSizeFor函式)// 初始化臨界值的具體實現 static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>>
八屆藍橋杯: 2 標題:跳蚱蜢
下標 != index style img pop names 就是 max 圖所示: 有9只盤子,排成1個圓圈。其中8只盤子內裝著8只蚱蜢,有一個是空盤。我們把這些蚱蜢順時針編號為 1~8每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過一個相鄰的蚱蜢跳到空盤中。請你計
獲取比某個數大的最小2次冪數
shm map ble 最小 size fin jdk1.8 代碼 pac static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n &g