zoukankan      html  css  js  c++  java
  • 寒假刷题之普通之最小差

    Description - 题目描述

    给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数。剩余元素可以用相同规则构建第二个数。除非构造的数恰好为0,否则不能以0打头。

    举例来说,给定数字0,1,2,4,6与7,你可以写出10和2467。当然写法多样:210和764,204和176,等等。最后一对数差的绝对值为28,实际上没有其他对拥有更小的差。

    Input - 输入

    输入第一行的数表示随后测试用例的数量。
    对于每组测试用例,有一行至少两个不超过10的十进制数字。(十进制数字为0,1,…,9)每行输入中均无重复的数字。数字为升序给出,相隔恰好一个空格。

    Output - 输出

    对于每组测试用例,输出一个以上述规则可获得的最小的差的绝对值在一行。

    Sample Input - 输入样例

    1
    0 1 2 4 6 7
    

    Sample Output - 输出样例

    28


    分析:
      数字不重复,且是0-9之内的数字,而且若是差最小,那么拆分组成的两个数字的位数是相近的,比如九个数字,应该拆为4位数和5位数得到的差的绝对值才会是最小的,若是10个数字,则应该拆为两个
    5位数字才有最小的差。因此可以分析出来时间复杂度是(10)!/((5)!*(5)!) * (5!) * (5!) = 252 *120 * 120 ,大概数量级为3600000,所以强行爆搜是不会超时的。
      那么怎么爆搜呢?应该利用STL里面的一个函数进行将数字全排列,每次将排列的结果进行整合,将得到的数字进行相减,并将结果与当前最小值进行比较并更新最小值。

    代码:
      
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    int main(){
     
     int T;
     scanf("%d ",&T);
     while(T--){
      char str[25]="0 1 2 4 6 7";
      gets(str);
      int values[15], len=0, ans=100000;
      for(int i=0; str[i]; i++)
       if(str[i]>='0' && str[i]<='9')
        values[len++]=str[i]-'0';
      bool isDo = true;
      if(len==2)
       ans=abs(values[1] - values[0]);
      else{
       while(next_permutation(values, values + len)){
        if(values[0] == 0 || values[len/2] == 0)
         continue;
        int num1 = 0, num2 = 0;
        for(int i=0; i<len/2; i++)
         num1 = num1*10 + values[i];
        for(int i=len/2; i<len; i++)
         num2 = num2*10 + values[i];
        ans = ans<abs((num1-num2))?ans:abs((num1-num2));
       }
      }
      cout<<ans<<endl;
     }
     return 0;
    }
  • 相关阅读:
    [课程设计]Scrum 1.5 多鱼点餐系统开发进度(点餐页面框架修复及继续布置)
    [课程设计]Scrum 1.4 多鱼点餐系统开发进度(点餐页面框架布置)
    [课程设计]Scrum 1.3 多鱼点餐系统开发进度(系统主界面框架&美化)
    任务完成情况
    SCRUM项目4.0
    操作系统 实验三 进程调度模拟程序
    Scrum 项目3.0
    操作系统 实验二、作业调度模拟程序 【完整版】
    Scrum 项目2.0
    0428 《构建之法》第6~7章读后感
  • 原文地址:https://www.cnblogs.com/huaixiaohai2015/p/6305987.html
Copyright © 2011-2022 走看看