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

回头再自己写!!

网上答案,验证正确。http://blog.csdn.net/peng_weida/article/details/7741888

  1. /*
  2. 45.雅虎(运算、矩阵):
  3. 2.一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值
  4. 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
  5. {3,6}{2,4,3} m=2
  6. 21
  7. {3,3}{2,4}{6} m=3 所以 m 的最大值为 3
  8. */
  9.  
  10. #include <cstdio>
  11. #include <cstdlib>
  12.  
  13. #define NUM 7
  14.  
  15. int maxShares(int a[], int n);
  16.  
  17. //aux[i]的值表示数组a中第i个元素分在哪个组,值为0表示未分配
  18. //当前处理的组的现有和 + goal的值 = groupsum
  19. int testShares(int a[], int n, int m, int sum, int groupsum, int aux[], int goal, int groupId);
  20.  
  21. int main()
  22. {
  23. int a[] = {, , , , , , };
  24. //{2,2,2,3,3,4,8} ;
  25. //{1,2,2,3,4,6};
  26. //{2, 6, 4, 1, 3, 9, 7, 5, 8, 10};
  27.  
  28. //打印数组值
  29. printf("数组的值:");
  30. for (int i = ; i < NUM; i++)
  31. printf(" %d ", a[i]);
  32.  
  33. printf("\n可以分配的最大组数为:%d\n", maxShares(a, NUM));
  34.  
  35. system("pause");
  36. return ;
  37. }
  38.  
  39. int testShares(int a[], int n, int m, int sum, int groupsum, int aux[], int goal, int groupId)
  40. {
  41. if (goal < )
  42. return ;
  43.  
  44. if (goal == )
  45. {
  46. groupId++;
  47. goal = groupsum;
  48.  
  49. if (groupId == m+)
  50. return ;
  51. }
  52.  
  53. for (int i = ; i < n; i++)
  54. {
  55. if (aux[i] != )
  56. continue;
  57.  
  58. aux[i] = groupId;
  59. if (testShares(a, n, m, sum, groupsum, aux, goal-a[i], groupId))
  60. return ;
  61.  
  62. aux[i] = ; //a[i]分配失败,将其置为未分配状态
  63. }
  64.  
  65. return ;
  66. }
  67. int maxShares(int a[], int n)
  68. {
  69. int sum = ;
  70. int *aux = (int *)malloc(sizeof(int) * n);
  71.  
  72. for (int i = ; i < n; i++)
  73. sum += a[i];
  74.  
  75. for (int m = n; m >= ; m--)
  76. {
  77. if (sum%m != )
  78. continue;
  79.  
  80. for (int i = ; i < n; i++)
  81. aux[i] = ;
  82.  
  83. if (testShares(a, n, m, sum, sum/m, aux, sum/m, ))
  84. {
  85. //打印分组情况
  86. printf("\n分组情况:");
  87. for (int i = ; i < NUM; i++)
  88. printf(" %d ", aux[i]);
  89.  
  90. free(aux);
  91. aux = NULL;
  92. return m;
  93. }
  94. }
  95.  
  96. free(aux);
  97. aux = NULL;
  98. return ;
  99. }

【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)的更多相关文章

  1. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

  2. c语言经典算法——查找一个整数数组中第二大数

    题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...

  3. 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...

  4. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  5. 剑指offer23:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。输出Yes OR No。

    1 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 2 思路和方法 二叉搜索树:二叉查找树(Bin ...

  6. 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表

    这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  7. LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)

    给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...

  8. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  9. 返回一个整数数组中最大子数组的和——java程序设计

    一.题目要求 1.输入一个整形数组,数组里有正数也有负数.2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.3.求所有子数组的和的最大值.要求时间复杂度为O(n) 二.设计思想 解决 ...

随机推荐

  1. 【AngularJS】—— 3 我的第一个AngularJS小程序

    通过前面两篇的学习,基本上对AngularJS的使用有了一定的了解. 本篇将会自己手动写一个小程序,巩固下理解. 首先要注意的是,引用AngularJS的资源文件angular.min.js文件. 由 ...

  2. 电脑开机黑屏,显示Reboot and Select proper boot device!

    “reboot and select proper boot device or insert boot media in selected boot device and press a key” ...

  3. Linux统计文件行数

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

  4. wordpress不用插件实现Pagenavi页面导航功能

    Pagenavi 是一个很好的功能,现在 WordPress 博客一般都是使用 WP-Pagenavi 插件来实现,但是如果插件一多的话整个wordpress效率就降低了,我们力求用尽量少的插件来实现 ...

  5. 第九天 iOS音频技术

    1. AQRecorder mRecordFormat.mFormatID = inFormatID; if (inFormatID == kAudioFormatLinearPCM) { // if ...

  6. ubutu之mysql emma中文乱码问题解决

    emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python).apt-get安装emmasudo apt-get install emma    ...

  7. PHP 三元运算符省略写法

    三元运算符 “?:” 又名条件运算符 表达式 (expr1) ? (expr2) : (expr3) 在 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值 ...

  8. 纯CSS多级菜单

    主要代码部分: /*新增的二级菜单部分*/ .menu ul ul { visibility:hidden;/*开始时是隐藏的*/ position:absolute; left:0px; top:3 ...

  9. Java VisualVM使用:堆OOM

    背景 近期遇到了一个java.lang.OutOfMemoryError: Java heap space的问题,排除了堆设置过小的问题,代码走查没有头绪,所以使用VisualVM工具分析堆内存情况. ...

  10. fontconfig编译出错

    编译fontconfig编译时出错: 出错configure: error: You must have freetype installed; see http://www.freetype.org ...