【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)
2014-08-13 09:31
656 查看
45.雅虎(运算、矩阵):
2.一个整数数组,长度为 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
回头再自己写!!
网上答案,验证正确。/article/2482962.html
2.一个整数数组,长度为 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
回头再自己写!!
网上答案,验证正确。/article/2482962.html
/* 45.雅虎(运算、矩阵): 2.一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 21 {3,3}{2,4}{6} m=3 所以 m 的最大值为 3 */ #include <cstdio> #include <cstdlib> #define NUM 7 int maxShares(int a[], int n); //aux[i]的值表示数组a中第i个元素分在哪个组,值为0表示未分配 //当前处理的组的现有和 + goal的值 = groupsum int testShares(int a[], int n, int m, int sum, int groupsum, int aux[], int goal, int groupId); int main() { int a[] = {8, 4, 3, 3, 2, 2, 2}; //{2,2,2,3,3,4,8} ; //{1,2,2,3,4,6}; //{2, 6, 4, 1, 3, 9, 7, 5, 8, 10}; //打印数组值 printf("数组的值:"); for (int i = 0; i < NUM; i++) printf(" %d ", a[i]); printf("\n可以分配的最大组数为:%d\n", maxShares(a, NUM)); system("pause"); return 0; } int testShares(int a[], int n, int m, int sum, int groupsum, int aux[], int goal, int groupId) { if (goal < 0) return 0; if (goal == 0) { groupId++; goal = groupsum; if (groupId == m+1) return 1; } for (int i = 0; i < n; i++) { if (aux[i] != 0) continue; aux[i] = groupId; if (testShares(a, n, m, sum, groupsum, aux, goal-a[i], groupId)) return 1; aux[i] = 0; //a[i]分配失败,将其置为未分配状态 } return 0; } int maxShares(int a[], int n) { int sum = 0; int *aux = (int *)malloc(sizeof(int) * n); for (int i = 0; i < n; i++) sum += a[i]; for (int m = n; m >= 2; m--) { if (sum%m != 0) continue; for (int i = 0; i < n; i++) aux[i] = 0; if (testShares(a, n, m, sum, sum/m, aux, sum/m, 1)) { //打印分组情况 printf("\n分组情况:"); for (int i = 0; i < NUM; i++) printf(" %d ", aux[i]); free(aux); aux = NULL; return m; } } free(aux); aux = NULL; return 1; }
相关文章推荐
- 算法习题45:对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一;;;一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 每日一道算法题:一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为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
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为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
- 【微软谷歌面试100题--【45】一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 面试题系列-整数数组长度为n,分为m份使各份的和相等,求最大的m
- 一个整数组,长度为 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
- Java编程:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。