zoukankan      html  css  js  c++  java
  • poj2718-Smallest Difference(枚举全排列)

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

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

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

  • 相关阅读:
    Odometer使用JavaScript和CSS制作数字滑动效果
    50个必备的实用jQuery代码段
    优化移动体验的HTML5技巧
    20 个非常棒的jQuery内容滑动插件
    最全的js正则表达式用法大全
    大神都未必解决的了简单问题,关于文字左右两端对齐。
    盘点20款表现出众的HTML5游戏
    蓝桥杯 格子问题:输出同行同列同对角线格子的位置
    与曹学长的一番谈话
    21天学习活动之——我的讲课新体验
  • 原文地址:https://www.cnblogs.com/My-Sunshine/p/4986001.html
Copyright © 2011-2022 走看看