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: 给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数.剩余元素可以用相同规则构建第二个数. ...
随机推荐
- JS技巧
2016-08-09 200多个js技巧代码(Down) word下载 200多个js技巧代码 目录 1.文本框焦点问题... 6 2.网页按钮的特殊颜色... 6 3.鼠标移入移出时颜色变化... ...
- python 新手遇到的问题
作为新手,我把之前遇到的问题贴出来 错误提示1: TypeError: unbound method a() must be called with A instance as first argum ...
- Yii2 事务操作
官网关于Yii2 事务的说明文档 http://www.yiiframework.com/doc-2.0/guide-db-active-record.html Working with Transa ...
- mysql 列类型
- Good Bye 2016
A - New Year and Hurry (water) #include <bits/stdc++.h> using namespace std; int main() { ]; ; ...
- Content Negotiation in ASP.NET Web API
本文描述Web API实现内容协商(content negotiation). The HTTP specification (RFC 2616) defines content negotiatio ...
- java-并发-线程
浏览以下内容前,请点击并阅读 声明 软件的并发是指同时做多件事情,java平台一开始就支持并发编程,java编程语言以及类库含有对并发最基本的支持,从5.0版本开始,java平台开始包含一些高并发的A ...
- spring源码解析——spring源码导入eclipse
一.前言 众所周知,spring的强大之处.几乎所有的企业级开发中,都使用了spring了.在日常的开发中,我们是否只知道spring的配置,以及简单的使用场景.对其实现的代码没有进行深入的了 ...
- 在树霉派上配置LAMP
apache2 配置文件: /etc/apache2/sites-enabled下的000-default.conf <VirtualHost *:> # The ServerName d ...
- bzoj3631树链剖分
虽然是水题1A的感觉太爽了O(∩_∩)O~ 题意相当于n-1次树上路径上每个点权值+1,最后问每个点的权值 本来想写线段树,写好了change打算框架打完了再来补,结果打完发现只是区间加和单点查 前缀 ...