目的:解決這個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);
}
}