小球放盒子问题
问题描述
将k个小球依次装入到若干个盒子中去(可以使用的盒子数不限)。
小球装入盒子的规则如下:
1)第一个盒子不能为空。
2)依次装入各个盒子的球数必须严格递增。例如:当k=8时,装入方法有1,2,5或1,3,4。
3)装入的盒子数尽可能多。
4)所有相邻盒子的球数之差的绝对值之和最小。
如上例中:装入法1,2,5,则差的绝对值之和为(2-1)+(5-2)=4。装入法1,3,4,则差的绝对值之和为(3-1)+(4-3)=3。因此应该采用后一种装法。
输入说明
程序要求从标准输入设备中读入多组测试数据,每组测试数据仅占一行,每行有一个整数k(1 ≤k ≤10000),即小球的个数。
输出说明
每组运算结果为一串整数,即表示依次放入各个盒子里的小球的个数,每两个数字之间用一个‘,’分隔。每组运算结果单独占一行,其行首和行尾都没有任何空格或其他任何字符。
输入范例
1
8
10
输出范例
1
1,3,4
1,2,3,4
算法思想
贪心算法求解:
先初始化一个递增序列,且序列的和小于与等于小球总数,这种情况下相邻的数之差的和一定是最小的。
- 例如 n = 10 时,序列为 :1、2、3、4 ; 此时差