本文代码参考网址:http://blog.youkuaiyun.com/v_july_v/article/details/6870251
问题描述:一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m 的最大值为3
算法分析:
初始值m从n开始,依次递减测试;数组的和为sum,若sum%m的值不为0,则直接跳过
对于符合sum%m = 0的每个m,扫描数组中每个元素,若该元素的状态为未选,将其分配到相应组
(1) 若当前组元素的和大于 sum/m,表明当前元素不适合该组,将其状态(aux[i])置为0
(2) 若当前组元素的和等于 sum/m, 将组号加1,继续进行下一组的判断
(3) 若当前组元素的和小于 sum/m,将当前加入的元素置为已选状态(aux[i]的值设为当前组号),继续判断下一个元素加入加入当前组的情况
#include <cstdio>
#include <cstdlib>
#define NUM 10
int maxShares(int a[], int n);
//aux[i]的值表示数组a中第i个元素分在哪个组,值为0表示未分配
//当前处理的组的现有和