1. 程式人生 > >藍橋杯訓練:2的次冪表示(遞迴)

藍橋杯訓練:2的次冪表示(遞迴)

程式碼:ALGO-95

題目名稱:2的次冪表示

關鍵字:

上傳日期:2014-12-29

資源限制:時間限制:1.0s 記憶體限制:512.0MB

問題描述

  任何一個正整數都可以用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)

提示
用遞迴實現會比較簡單,可以一邊遞迴一邊輸出

個人思路:通過觀察邊界條件為指數為0,1,2的情況直接分別輸出2(0),2,2(2)就行,其他則要遞迴呼叫自身求解!上程式碼:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println(in.nextInt());
    }

    public static void
f(int k) { String str = Integer.toBinaryString(k);// 得到該數的2進位制字串 boolean first = true; // 記錄是否為第一個元素,是的話不用輸出時不用新增加號 // 遍歷字串字元,找到字元為'1'的位置轉換為次冪位進行遞迴呼叫,對次冪位小於等於2的直接輸出不用遞迴 for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == '1') { if (!first) System.out
.print("+"); first = false; //次冪小於等於2不用遞迴,直接輸出 if (str.length() - 1 - i == 0) System.out.print("2(0)"); else if (str.length() - 1 - i == 1) System.out.print("2"); else if (str.length() - 1 - i == 2) System.out.print("2(2)"); //次冪大於 else { System.out.print("2("); f(str.length() - 1 - i); System.out.print(")"); } } } } }

相關推薦

藍橋訓練2表示()

程式碼:ALGO-95 題目名稱:2的次冪表示 關鍵字: 上傳日期:2014-12-29 資源限制:時間限制:1.0s 記憶體限制:512.0MB 問題描述   任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。

藍橋訓練八皇后問題

八皇后問題:在8×8格的國際象棋上擺放八個皇后, 使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上, 問有多少種擺法。 思路,八皇后是典型的回溯演算法,方法如下,dfs演算法搜全排列,已行為推進,每選新一行跳轉布林判斷。新行的選取不能和前面已經放好的元素同列或者對角

藍橋訓練2n皇后問題

問題描述: 給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少种放法?n小於等於8。 輸入格式   輸入的第一

藍橋訓練 學霸的迷宮(bfs)

一道普通的bfs+路徑儲存題,做了大半天,很多細節沒注意,除錯了好久,都是因為平時太好高騖遠不肯動手寫的後果,寫下來當作教訓! 問題描述   學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在一個城堡裡,城堡外面是

藍橋訓練合併石子

問題描述   在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。 輸入格式   輸入第一行包含一個整數n,表示石子的堆數。   接下來一行,包含

警察智力訓練--藍橋歷年java真題(java實現eval演算法)

匪警請撥110,即使手機欠費也可撥通!    為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!    某批警察叔叔正在進行智力訓練:    1 23 4 5 6 7 8 9 = 110;    請看上邊

藍橋 Java 搭積木規則問題 使用方法求解

** 搭積木規則: ** 每個積木放到其它兩個積木的上面,並且一定比下面的兩個積木數字小。 最後搭成4層的金字塔形,必須用完所有的積木。 下面是兩種合格的搭法: 0 1 2 3 4 5 6 7 8 9 0 3 1 7 5 2 9 8 6 4 請你計算這樣的搭法一

整數求解

整數次冪一般解法 時間複雜度O(n)的方法可以迭代n次,然後相乘結果返回,例如求xn虛擬碼: double pow(x,n) { res=x; while(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表示

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表示

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表示 java

藍橋杯 演算法訓練 2的次冪表示 java 藍橋杯 演算法訓練 2的次冪表示 java 題目說明 輸入輸出 輸入格式 輸出格式 樣例輸入 樣例輸出 樣例輸入 樣例輸出 提示 思路 程式碼 題目說明   任何一個正整數都可

藍橋 ——2表示

問題描述   任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。   將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0   現在約定冪次用括號來表示,即a^b表示為a(

藍橋 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的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進製表示,例如:137的2進製表示為10001001。   將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0   現在約定冪次用括號來表示,即a^b表示為a(b)   此