zoukankan      html  css  js  c++  java
  • poj2718Smallest Difference (穷竭搜索)

    escription - 题目描述
    给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数。剩余元素可以用相同规则构建第二个数。除非构造的数恰好为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

    AC代码:

    include

    include

    include

    include

    using namespace std;
    int shuzi(int num[],int i,int j);
    int main(){
    char str[25];
    int num[10],T;
    scanf("%d",&T);
    getchar();
    while(T--){
    gets(str);
    int i=0,j=0;
    for(i=0;str[i]!='';i++){
    if(str[i]>='0'&&str[i]<='9') num[j]=str[i]-'0',j++;
    }
    int min1=1000000000;
    do{
    if((num[0]0&&j/2-1>0)||(num[j/2]0&&j-1-j/2>0)) continue;
    int s1=shuzi(num,0,j/2-1);
    int s2=shuzi(num,j/2,j-1);
    if(abs(s1-s2)<min1) min1=abs(s1-s2);
    }while(next_permutation(num,num+j));
    cout<<min1<<endl;
    }
    return 0;
    }

    int shuzi(int num[],int i,int j){
    int s=0;
    for(int k=0;i<=j;i++,k++){
    s=s10+num[i]; //这一个是最重要的,如果使用s=s+num[i]pow(10.0,k)会超时,而这么些不会超时。
    }
    return s;
    }


    作者:孙建钊
    出处:http://www.cnblogs.com/sunjianzhao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    穿戴式眼镜显示屏方案
    centos8 shell脚本定时restart workerman问题
    cmake中文文档(一)-编译命令行工具
    Dear ImGui中文文档(一)
    PHP实现布隆过滤算法
    case when的记录
    前端的一些记录
    z-index 弹出元素被原本页面的元素遮挡住
    DevExpress 导出pdf中文不显示或者乱码问题
    DevExpress控件位置的微调
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/11412178.html
Copyright © 2011-2022 走看看