一,题意:
  给出最多10个数字,将它们划分为两个整数,求差值最小的值(除非只有一位数,否则不允许出现先导0)
  很显然如果总共有n个数,必然有一个整数长n/2,另一个长n-n/2。
二,思路:
  利用next_permutation()函数枚举数字的每个排列
三,步骤:
  1,输入字符数组,并转换为整形数组;
  2,利用next_permutation()函数,枚举数组的每一个排列,根据条件求出划分的两个整数的差值最小值。

 #include<iostream>
#include<algorithm>
#include<cstring>
using namespace std; int main() {
char s[]; //利用字符数组存储,是因为并不知道会输入几个数,那么我们就定义字符数组来存储输入一行的字符。
int t;
cin >> t;
getchar(); //这里getchar()是接收上面输入t后的回车符,若没有,则下面的gets_s()函数,就会接收回车符。
while (t--) {
int a[], num = , ans = 0x3f3f3f3f; //在通常的场合下,设置无穷大时,0x3f3f3f3f是一个非常棒的选择。如果想把int整形数组初始化为无穷大,我们只需要memset(a,0x3f,sizeof(a)).
gets_s(s); //VS2015使用的是新C标准,也就是C11,而VC6.0用的是老标准。在新标准中,用gets_s代替gets
for (int i = ; i < strlen(s); i++) { //将字符数组转化为整形数组
if (s[i] >= ''&&s[i] <= '') {
a[num++] = s[i] - ''; //a[]用来存储s[]转化得到的整形数组
}
}
sort(a, a + num);
do {
int num1 = , num2 = ;
if (!a[] || !a[num/] && num>) //前面那个数的首位不能是0 或者 后面那个数的首位也不能是0 , 还有当为输入是 10 时 ,要么前面那个数的是0, 要么后面的那个数是0,所以条件 num>2 加"||"前后都一样
continue;
for (int i = ; i < num/; i++) {
num1 = num1 * + a[i]; //前一半数组的数,化为整数
}
for (int i = num / ; i < num; i++) {
num2 = num2 * + a[i]; //后一半数组的数,化为整数
}
ans = min(ans, abs(num1 - num2));
} while (next_permutation(a, a + num));
cout << ans << endl;
}
return ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

poj2718-Smallest Difference(枚举全排列)的更多相关文章

  1. Smallest Difference(暴力全排列)

    Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10387   Accepted: 2 ...

  2. (DFS、全排列)POJ-2718 Smallest Difference

    题目地址 简要题意: 给若干组数字,每组数据是递增的在0--9之间的数,且每组数的个数不确定.对于每组数,输出由这些数组成的两个数的差的绝对值最小是多少(每个数出现且只出现一次). 思路分析: 对于n ...

  3. POJ-2718 Smallest Difference

    http://poj.org/problem?id=2718 从一些数里面选择一个子集组成一个数,余下的数组成另外一个数,(数不能以0开头)问两个数的差的绝对值最小是多少! 不管是奇数还是偶数,要想绝 ...

  4. poj2718 Smallest Difference(dfs+特判,还可以贪心更快)

    https://vjudge.net/problem/POJ-2718 其实不太理解为什么10超时了.. 这题似乎是有贪心优化的方法的,我下面直接暴力了.. 暴力之余要特判两个点:1.超时点就是n=1 ...

  5. POJ 2718 Smallest Difference 枚举

    http://poj.org/problem?id=2718 题目大意: 给你一些数字(单个),不会重复出现且从小到大.他们可以组成两个各个位上的数字均不一样的数,如 0, 1, 2, 4, 6 ,7 ...

  6. poj2718 Smallest Difference

    思路: 暴力乱搞. 实现: #include <iostream> #include <cstdio> #include <sstream> #include &l ...

  7. POJ 2718 Smallest Difference(贪心 or next_permutation暴力枚举)

    Smallest Difference Description Given a number of distinct decimal digits, you can form one integer ...

  8. POJ 2718 Smallest Difference dfs枚举两个数差最小

    Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19528   Accepted: 5 ...

  9. 【POJ - 2718】Smallest Difference(搜索 )

    -->Smallest Difference 直接写中文了 Descriptions: 给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数.剩余元素可以用相同规则构建第二个数. ...

随机推荐

  1. iOS 通信常用小功能

    打电话 a.最简单最直接的方式:直接跳到拨号界面 NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplicatio ...

  2. UILabel 根据文本内容设置frame

    CGRect senderFrame = cell.senderLabel.frame;    CGRect creatAtFrame = cell.creatAtLabel.frame;    CG ...

  3. Oracle临时文件

    临时数据文件时一种特殊的文件,当内存不足时,Oracle用他来存储一些临时数据,如排序或散列操作. 自12c起,对临时表的操作所产生的undo也会放到临时表空间中,而在12c之前,这部分undo放在u ...

  4. JAVABeanUtils

    在写如何使用java BeanUlits 之前需要清楚几件事情 1. 我们每次所定义的类,其实是实体,同时也被称作为JavaBean; 2.  为什么我们要使用BeanUlits这个框架     &g ...

  5. Greenplum安装

    最近需要安装Greenplum测试一些东西,在安装过程中出现了许多问题,所以在这里将安装过程整理一下,主要参考<Greenplum企业应用实践>和http://jxzhfei.blog.5 ...

  6. AJAX 缓存

     cache   默认为true,   从浏览器里读取缓存.   提高性能   设置为false,则每次从方法获取,不进缓存

  7. MVC中RenderBody的工作原理

    A)什么是RenderBody  根据MSDN的解释(http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US& ...

  8. backup

    1.垂直居中 2.敏捷开发,bug级别划分 3.bash构建,设计模式 4.git reset  revoke rebase 区别 vue -validator 规则 • required: 是否是必 ...

  9. 使用Android Butterknife

    我之前浏览过android butterknife 的使用 在android studio 中,很惊喜,已经成为一个插件来使用 这个android butterknife 最大的用处,就是直接生成la ...

  10. [MySQL+PHP] 触发器及存储过程等MySQL功能在PHP中实现的坑

    折腾了一下午,始终没有能搞定在PHP中编写事件. 因为业务需求,需要实现一个预操作的功能,即业务人员填写未来的某个要做某个操作.在这个日期到来之前,则一切照常. 想通过PHP编写MySQL Event ...