POJ 2718 Smallest Difference(暴力,全排列,next_permutation)
2016-03-16 17:56
387 查看
题目链接:http://poj.org/problem?id=2718
题意:给出2-10个数(个位数0-9),用这几个数组成两个数(除0之外,首位不能为0),求这两个数的最小值。
题解:两个数差值最小首先保证位数差值最小,所以对这几个数从中间分开,组成两个数,求出差值。用到STL中的next_permutation()函数。
代码:
题意:给出2-10个数(个位数0-9),用这几个数组成两个数(除0之外,首位不能为0),求这两个数的最小值。
题解:两个数差值最小首先保证位数差值最小,所以对这几个数从中间分开,组成两个数,求出差值。用到STL中的next_permutation()函数。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cctype> using namespace std; const int INF=0x3f3f3f3f; int num[12]; char s[30]; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int t; scanf("%d",&t); getchar(); while(t--) { gets(s); int t=0; for(int i=0;s[i];i++) { if(isdigit(s[i])) { num[t++]=s[i]-'0'; } } sort(num,num+t); int ans=INF; int a,b; do { /*for(int i=0;i<t;i++) { printf("%d",num[i]); } printf("\n");*/ if(num[0]==0) { a=0; b=0; for(int i=1;i<t;i++) b=b*10+num[i]; ans=min(ans,abs(a-b)); } else { if(num[0]==0&&t/2>=1) continue; if(num[t/2]==0&&t-t/2>=1) continue; a=0;b=0; for(int i=0;i<t/2;i++) { a=a*10+num[i]; } for(int i=t/2;i<t;i++) { b=b*10+num[i]; } ans=min(ans,abs(a-b)); } }while(next_permutation(num,num+t)); printf("%d\n",ans); } return 0; }
相关文章推荐
- JS笔记——首字母设置大写
- 再战“所见即所得”富文本编辑器(附 原创工具)
- js开发注意事项
- JavaScript基本功能笔记
- JSON代码小计
- 前端开发工具
- jquery EasyUI datagrid 的扩展
- ReactiveCocoa中信号的使用
- QHeaderView样式表的使用
- 浅谈Json数据格式
- jQuery.extend 函数详解
- JQuery tab 选项卡插件
- HTML表格
- IOS:Safari不兼容Javascript中的Date问题
- React 复合组件
- SeaJS使用手记
- html select 下拉箭头隐藏
- CSS3无前缀脚本prefixfree.js/Animatable
- 礼拜三log~常用java函数 & jQuery ajax的serialize() 方法 & 获取参数 & IE浏览器下button显示黑边框问题 & 关于ajax
- 为什么我们要使用min-height和max-height样式属性?