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: 给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数.剩余元素可以用相同规则构建第二个数. ...
随机推荐
- ASP.NET知识总结(8.AJAX异步)
AJAX:”Asynchronous JavaScript and XML” 中文意思:异步JavaScript和XML. 指一种创建交互式网页应用的网页开发技术. 不是指一种单一的技术,而是有机 ...
- System系统类常用方法
System 系统类: 主要用于获取系统的属性数据. System类常用的方法: arraycopy(Object src, int srcPos, Object dest, int destPos, ...
- Mac系统下React Native环境搭建
这里记录一下在Mac系统下搭建React Native开发环境的过程: 1. 安装HomeBrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.g ...
- ios 弹出不同的键盘
iOS 提供了10种键盘类型,在开发中,我们可以根据不同的需求,选择不同的键盘样式,例如,当我们只需要输入手机号码时,可以选择纯数字类型的键盘(NumbersAndPunctuation),当我们需要 ...
- 使用VBScript实现设置系统环境变量的小程序
本人有点桌面洁癖,桌面上只放很少的东西,很多软件都用快捷键调出.最近频繁用到一个软件,我又不想放个快捷方式在桌面,也不想附到开始菜单,于是乎想将其所在目录附加到系统环境变量Path上,以后直接在运行中 ...
- HDU 5795 A Simple Nim 打表求SG函数的规律
A Simple Nim Problem Description Two players take turns picking candies from n heaps,the player wh ...
- 杨氏矩阵定义及其查找的实现C++
先介绍一下这个数据结构的定义,Young Tableau有一个m*n的矩阵,然后有一数组 a[k], 其中 k<=m*n ,然后把a[k]中的数填入 m*n 的矩阵中,填充规则为: 1. 每一 ...
- startssl申请配置免费https证书
之前给业务配置都是在沃通上申请免费证书,而后通过反向代理层的Nginx进行https认证. 今天来了个新需求,要求域名直接解析至阿里云SLB.https配置需要通过阿里云的控制台部署这倒无所谓,只是在 ...
- linux中shell变量$#,$@,$0,$1,$2的含义解释
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...
- 【转】apache 二级域名设置完整步骤
原文链接:http://blog.sina.com.cn/s/blog_5375d76b01014fnt.html 最近在折腾网站二级域名的事情,在网上查了很多零碎的文档,不完整,有些也没有自己验证, ...