题目:有10个任意的正整数,将其分为两组A和B,要求组A中每个数据的和与组B中每个数据的和之差的绝对值最小。请设计算法实现数的分组(找出一个答案即可)。

C++版本:

 1 #include<iostream>
 2
 3 using namespace std;
 4
 5 void get_groupAB(int arr[]) {
 6     int sum_a, sum_b;
 7     int index, difference=0;
 8     int i,i_copy;
 9     //数组所有的元素求和给difference赋初值
10     for ( i = 0; i < 10; i++) {
11         difference += arr[i];
12     }
13     //从0000000000到1111111111,尾数为零时,对应的数组元素划分给a数组,否则划分给b数组
14     for ( i = 0; i < 0x3FF; i++) {
15         sum_a = 0, sum_b = 0;
16         i_copy=i;
17         for (int j = 0; j < 10; j++) {
18             if ((i_copy & 1) == 0) {
19                 sum_a += arr[9 - j];
20             }
21             else {
22                 sum_b += arr[9 - j];
23             }
24             i_copy >>= 1;
25         }
26         if (difference > abs(sum_a - sum_b)) {
27             difference = abs(sum_a - sum_b);
28             index = i;            //存储最小值对应的索引
29         }
30         if (difference == 0) {
31             break;
32         }
33     }
34     //存储分组
35     int sub_a[10], sub_b[10];
36     int count_a=0, count_b=0;
37     for (i = 0; i < 10; i++) {
38         if ((index & 1) == 0) {
39             sub_a[count_a] = arr[9 - i];
40             count_a++;
41         }
42         else {
43             sub_b[count_b] = arr[9 - i];
44             count_b++;
45         }
46         index >>= 1;
47     }
48     //输出显示部分
49     cout << "group A:" << endl;
50     for (i = 0; i < count_a; i++) {
51         cout << sub_a[i] << endl;
52     }
53     cout << "group B:" << endl;
54     for (i = 0; i < count_b; i++) {
55         cout << sub_b[i] << endl;
56     }
57     cout << "difference:" << difference << endl;
58 }
59
60 int main(int argc, char *argv[]) {
61
62     int arr[10];
63     int i=0;
64     while (i < 10) {
65         cin >> arr[i];
66         i++;
67     }
68     get_groupAB(arr);
69     getchar();
70     getchar();
71     return 0;
72 }

思路:可以用一个10位的二进制数表示,对应位置为零时,分给一个组,为1时分给另外一个组;任何一个数都可以分给组A或者组B两种情况,故总的情况共有2^10,即1024种,其中不能全给A,也不能全给B,所以总共1024-2=1022种情况,进行枚举即可。另外如果出现差值为0时可以马上终止循环,因为不可能出现比0小的数了。

经典算法详解(8)数的分组相关推荐

  1. 经典算法详解--CART分类决策树、回归树和模型树

    Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Reg ...

  2. 机器学习经典算法详解及Python实现--元算法、AdaBoost

    http://blog.csdn.net/suipingsp/article/details/41822313 第一节,元算法略述 遇到罕见病例时,医院会组织专家团进行临床会诊共同分析病例以判定结果. ...

  3. 机器学习10大经典算法详解

    "数据+算法=模型". 面对具体的问题,选择切合问题的模型进行求解十分重要.有经验的数据科学家根据日常算法的积累,往往能在最短时间内选择更适合该问题的算法,因此构建的模型往往更准确 ...

  4. 经典算法详解 之 递归算法

    递归算法:递归算法是把问题转化为规模缩小了的同类问题的子问题.然后递归调用函数(或过程)来表示问题的解. 递归算法是算法设计中比较常用的一种算法,它的优点在于考虑问题的角度不再局限于过程,而是从整体的 ...

  5. sporadic偶发实时任务多核分区动态优先级EDF(或者DM)调度(以及可调度性分析)经典算法详解

    sporadic任务的概念:实时任务分类与术语_标biao的博客-CSDN博客,也就是任务的截止期可以小于周期. with no loss of generality,任务集为封闭任务集,不会运行时动 ...

  6. 起名算法 php,PHP实现各种经典算法详解

    //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, ...

  7. 经典算法详解(2)寻找数组中的次大数

    题目:10个互不相等的整数,求其中的第2大的数字,要求数组不能用排序,设计的算法效率越高越好. 1 #include<iostream> 2 3 using namespace std; ...

  8. 经典算法详解(10)图中有多少个三角形

    题目:请说出下面图形中包含多少个三角形?请用一个程序完成计算. C++版本 1 #include<iostream> 2 3 using namespace std; 4 5 const ...

  9. AnchorFree系列算法详解

    目录 前言 一.Anchor-Based方法回顾 二.Anchor Free系列方法简介 1. Anchor Free系列算法历史 2. Anchor free经典算法详解 2.1. 基于关键点的An ...

最新文章

  1. 腾讯云详解宕机故障:光纤挖断后的150秒
  2. 对于一个人工智能项目如何把模型调整为最好
  3. jquery判断页面滚动条(scroll)是上滚还是下滚,且是否滚动到头部或者底部
  4. 十六进制除法运算法则_苏教版数学七年级上册 微课视频 2.6 有理数的乘法与除法(1)...
  5. 如何用Pygame写游戏(七)
  6. python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂
  7. iOS 全屏侧滑/UIScrollView/UISlider间滑动冲突
  8. 一位工作10年的前端总结的10个忠告
  9. express+mongodb制作简单的文章发布系统(一)之环境的搭建
  10. 当鼠标移动到上面时的应用
  11. 快速破解基于linux内核的开源路由器后台管理登录密码
  12. c语言计算机结题报告怎么写,结题报告格式及如何写结题报告
  13. PostgreSQL数据库概述
  14. 一、Docker 容器
  15. 《今日简史:人类命运大议题》的读后感范文3400字
  16. 乐动手环app下载安装_乐动手环app下载安装
  17. 华为云服务的使用方法详解--以照片备份与恢复为例
  18. Python爬虫——爬取博物馆新闻 + 情感倾向分析 + 导入数据库
  19. Shiro的在Springboot中的使用
  20. 【统计数字】数字计数

热门文章

  1. CentOS 6 IPv6 关闭方法
  2. SpringInAction--Spring Web应用之SpringMvc 注解配置
  3. eclipse hibernate配置文件(*.hbm.xml)加上自动提示功能
  4. php在没用xdebug等调试工具的情况下如何让调试内容优雅地展现出来?--php数组格式化...
  5. C#之Action和Func的用法(转自 https://www.cnblogs.com/LipeiNet/p/4694225.html)
  6. 2019年集五福本周五上线!四种玩法你都会了吗?
  7. 【转】vfork 和 fork的区别
  8. UVA 10214 Trees in a Wood
  9. dubbo服务调试管理实用命令
  10. LNMP和LAMP的编译安装