poj2718-Smallest Difference(枚举全排列)
一,题意:
给出最多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(枚举全排列)的更多相关文章
- Smallest Difference(暴力全排列)
Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10387 Accepted: 2 ...
- (DFS、全排列)POJ-2718 Smallest Difference
题目地址 简要题意: 给若干组数字,每组数据是递增的在0--9之间的数,且每组数的个数不确定.对于每组数,输出由这些数组成的两个数的差的绝对值最小是多少(每个数出现且只出现一次). 思路分析: 对于n ...
- POJ-2718 Smallest Difference
http://poj.org/problem?id=2718 从一些数里面选择一个子集组成一个数,余下的数组成另外一个数,(数不能以0开头)问两个数的差的绝对值最小是多少! 不管是奇数还是偶数,要想绝 ...
- poj2718 Smallest Difference(dfs+特判,还可以贪心更快)
https://vjudge.net/problem/POJ-2718 其实不太理解为什么10超时了.. 这题似乎是有贪心优化的方法的,我下面直接暴力了.. 暴力之余要特判两个点:1.超时点就是n=1 ...
- POJ 2718 Smallest Difference 枚举
http://poj.org/problem?id=2718 题目大意: 给你一些数字(单个),不会重复出现且从小到大.他们可以组成两个各个位上的数字均不一样的数,如 0, 1, 2, 4, 6 ,7 ...
- poj2718 Smallest Difference
思路: 暴力乱搞. 实现: #include <iostream> #include <cstdio> #include <sstream> #include &l ...
- POJ 2718 Smallest Difference(贪心 or next_permutation暴力枚举)
Smallest Difference Description Given a number of distinct decimal digits, you can form one integer ...
- POJ 2718 Smallest Difference dfs枚举两个数差最小
Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19528 Accepted: 5 ...
- 【POJ - 2718】Smallest Difference(搜索 )
-->Smallest Difference 直接写中文了 Descriptions: 给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数.剩余元素可以用相同规则构建第二个数. ...
随机推荐
- 漫谈iOS程序的证书和签名机制
接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕和崇拜.于是,花了一点时间去研究了一下 ...
- 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统
引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...
- JQuery UI dialog 弹窗实例及参数说明
按钮代码: <a id="suprise" style="margin-left: 0.5em;cursor:pointer;">点我会有惊喜< ...
- tp框架之session
系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成,该函数可以完成Session的设置.获取.删除和管理操作. session初始化设置 如果session ...
- oracle创建DBLINK
1.查看Global_name参数 show parameter global_name; 该参数为true时,你在本地建立的DBLINK的名称必须和远程的Global_name一致才行. 2.查看 ...
- 对Raphael画图标的一个jquery简单封装
公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封装一下这个功能,就写了一个简单的插件:jquery ...
- ExtJS客户端代理
代理(proxy)分为两大类:客户端代理和服务器端代理.客户端代理主要完成与浏览器本地存取数据相关的工作,服务器端代理则是通过发送请求,从服务器端获取数据.根据各自获取数据的方式,客户端代理和服务器端 ...
- 机器学习之K-近邻算法
机器学习可分为监督学习和无监督学习.有监督学习就是有具体的分类信息,比如用来判定输入的是输入[a,b,c]中的一类:无监督学习就是不清楚最后的分类情况,也不会给目标值. K-近邻算法属于一种监督学习分 ...
- 大神的Blog挂了,从Bing快照里复制过来的备份
UWidget封装SWidget到UMG 2015年8月30日0 为了使用UMG中的一些高级或便利特性,需要将制作好的Slate控件封装到UWidget中去. 当前UE4版本4.8.3. 将Slate ...
- Map的性能
HashMap Map基于散列表的实现(它取代了Hashtable).插入和查询"键值对"的开销是固定的.可以通过构造器设置容量和负载因子,以调整容器的性能 LinkedHashM ...