一、题意:给定一串数字,数字没有重复,个数为2~10个。求这些数字分为两份,组合成的两个数的差最小是多少

二、思路:首先可以肯定的是,将这n个数平均分成两份,所得到的最小差一定在其某个组合当中。因此可将该序列进行全排列,然后便利每一种情况。这里需要注意以下几点:1、利用next_permutation函数进行全排列前,需要将原序列按从小到大先排个序  2、要考虑这两个数不能以0开头的情况

三、代码:

#include"iostream"
#include"stdio.h"
#include"algorithm"
#include"string.h"
using namespace std; int num[15];
int cnt; int GetDiff(int *a)
{
int n=0,m=0;
if((a[0]==0||a[cnt/2]==0)&&cnt>2) return -1; for(int i=0;i<cnt/2;i++)
{
n=n*10+a[i];
}
for(int j=cnt/2;j<cnt;j++)
{
m=m*10+a[j];
}
return abs(n-m);
} int Permutation()
{
int miniDiff=10000000;
do
{
int diff=GetDiff(num);
if(diff!=-1)
miniDiff=min(miniDiff,diff);
}while(next_permutation(num,num+cnt)); return miniDiff;
} int main()
{
// freopen("in.txt","r",stdin);
int t;
cin>>t;
getchar();
while(t--)
{
char input[100];
gets(input);
cnt=0;
for(int i=0;i<strlen(input);i++)
{
if(isdigit(input[i]))
num[cnt++]=input[i]-'0';
}
sort(num,num+cnt);
cout<<Permutation()<<endl;
}
return 0;
}

  

最新文章

  1. 自定义浏览器协议,实现web程序调用本地程序
  2. VS2010+Opencv+SIFT以及出现的问题-关于代码sift_3_c的说明
  3. Emgu学习之(一)——Emgu介绍
  4. MVC4.0 利用HandleErrorAttribute和log4net实现记录异常日志功能
  5. js 监听监键盘动作
  6. 内核链表list.h
  7. php中使用linux命令四大步骤
  8. C# 链表操作
  9. boot之mybatis
  10. Struts2(四)Struts2配置文件的配置
  11. vuex入门
  12. EJB_开发EJB容器模型的WEB服务
  13. Pandas系列(四)-文本数据处理
  14. Windows 下安装Git工具及基础使用
  15. 搭建SDN网络——mininet
  16. java eclipse 安卓环境配置
  17. 使用EnterpriseLibrary插入Oracle CLOB数据
  18. 火狐的3d视图插件Tilt 3D
  19. Spring依赖包
  20. 十二.jQuery源码解析之.eq().first().last().slice()

热门文章

  1. ShopNc实例化对象
  2. SQL 左联接去除左边重复的数据
  3. 【转】android手势处理揭秘
  4. Log--事务日志
  5. mvc 高并发解决方案之一---存储过程
  6. 十七、创建一个 WEB 服务器(一)
  7. 题解 P2863 【[USACO06JAN]牛的舞会The Cow Prom】
  8. luoguP1401 城市
  9. POM很重要的3个关系
  10. 降维之主成分分析法(PCA)