2^k進位制數 演算法題練習/藍橋杯 【簡單解法,java】
阿新 • • 發佈:2019-01-06
目的:解決這個2^k進位制數的問題。
看來半天的題目,沒理解什麼意思。也懶得去理解了,只要解出來了就好了。直接暴力解題。
思路
1、先求出這是多少進位制數 (這個很簡單,一個 for迴圈搞定)
2、看看可以分成幾段,直接 w / k ,不能整除的話,結果加1(這裡我理解成,就是最多能為多少位)
3、一個簡單的累加就好了,你會發現規律就是,累加 上一步計算出來的次數,裡面的迴圈也簡單。
程式碼:這裡簡單說明一下,自己測試的程式碼需要輸入 k 和 w 的,但是提交到系統是讀取檔案的。所以給出兩套程式碼
測試程式碼
public static void main(String[] args) { Scanner in = new Scanner(System.in); int k = in.nextInt(); int w = in.nextInt(); int sum = 1; int s = 0; int ss = 0; for (int i = 0;i < k; i++) //計算出是多少進位制 sum *= 2; if (w % k == 0) s = w / k; else s = (w / k) + 1; sum = sum - 1; for (int i = 2;i <= s; i++){ sum = sum - 1; for (int j = sum;j > 0;j--) ss += j; } System.out.println(ss); }
提交程式碼
public static void main(String[] args) { Scanner in = new Scanner(System.in); int k = 0; int w = 0; int sum = 1; int s = 0; int ss = 0; while (in.hasNext()){ k = in.nextInt(); w = in.nextInt(); for (int i = 0;i < k; i++) //計算出是多少進位制 sum *= 2; if (w % k == 0) s = w / k; else s = (w / k) + 1; sum = sum - 1; for (int i = 2;i <= s; i++){ sum = sum - 1; for (int j = sum;j > 0;j--) ss += j; } System.out.println(ss); } }