解題思路:題目是分石頭的。抽象出來,将一個數n,分成一個序列,相鄰數字不能相等,求分組中數字大于等于k的最多組數。當兩個數字k和k+1交替出現時,才會出現較多的組數。将k和k+1看做是一個組合,求組合數m=n/(2*k+1)的值,并判斷餘數y=n%(2*k+1)和k的大小,若大于k,則(2m+1)堆,否則為2m個堆。
package 京東;
import java.util.Scanner;
/**
* 小明得到了n個石頭,他想把這些石頭分成若幹堆,每堆至少有一個石頭。他把這些石堆排在一條直線上,他希望任意相鄰兩堆的石頭數都不一樣。
* 小明最後的得分為石頭數大于等于k的石堆數,問他最多能得多少分。
* 嚴格地,小明把n個石頭分成了m堆,每堆個數依次為a1,a2.....,am。
* 要求滿足: 1、ai≥1(1≤i≤m) 2、ai≠ai+1(1≤i<m) 3、a1+a2+...+am=n 小明想知道中大于等于的數最多能有多少個?
* 測試案例:
* 輸入:5 1
* 輸出:3
*/
public class Q2017_分堆A {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int k = sc.nextInt();
if(n<k){
return;
}
int dou = 2*k + 1;//将k和k+1作為一組資料
int num = n/dou;//一共有num組,及2*num個堆
int mod = n%dou;//取餘後,判斷是否大于k,若大于k則堆數+1
if(mod>=k){
num = 2*num + 1;
}else {
num = 2*num;
}
System.out.println(num);
}
sc.close();
}
}