• 题目1190:大整数排序


    题目1190:大整数排序

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:4581

    解决:2060

    题目描述:

    对N个长度最长可达到1000的数进行排序。

    输入:

    输入第一行为一个整数N,(1<=N<=100)。 接下来的N行每行有一个数,数的长度范围为1<=len<=1000。 每个数都是一个正数,并且保证不包含前缀零。

    输出:

    可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。

    样例输入:
    3
    11111111111111111111111111111
    2222222222222222222222222222222222
    33333333
    样例输出:
    33333333
    11111111111111111111111111111
    2222222222222222222222222222222222
    来源:
    2006年华中科技大学计算机研究生机试真题
    答疑:
    解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7913-1-1.html
    这道题目开始是自己用c中的char定义字符串来写的,写的好复杂。。。
    关键是还没写出来!!!不知道用冒泡哪里错了
    #include<iostream>
    #include<cstring>
    #include<queue>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    #define maxn 1010
    int f(char s[],char s1[])
    {
        if(strlen(s)!=strlen(s1))
        {
            if(strlen(s)>strlen(s1))
                return 1;
            else return 2;
        }
        for(int i=0; i<strlen(s); i++)
        {
            if(s[i]>s1[i])
                return 1;
            if(s[i]<s1[i])
                return 2;
        }
        return 0;
    }
    char str[105][1010];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            memset(str,0,sizeof(str));
            getchar();
            for(int i=0; i<n; i++)
                gets(str[i]);
            for(int k=0; k<n-1; k++)
                for(int p=0; p<n-1-k; p++)
                    if(f(str[p],str[p+1]))
                    {
                        char tmp[1010];
                        strcpy(tmp,str[p]);
                        strcpy(str[p],str[p+1]);
                        strcpy(str[p+1],tmp);
                    }
            for(int i=0; i<n; i++)
                puts(str[i]);
        }
        return 0;
    }

    后来改成用c++的string来写,重写了cmp,然后就出来了。。。

    #include<iostream>
    #include <string.h>
    #include <string>
    #include <algorithm>
    using namespace std;
    #define maxn 105
    int i,n;
    string str[maxn];
    bool cmp(string s1, string s2)
    {
        if(s1.size() == s2.size())
            return s1 < s2;
        else
            return s1.size() < s2.size();
    }
    int main()
    {
        while(cin >> n)
        {
            for(i = 0 ; i < n; i++)
                cin >> str[i];
            sort(str, str+n ,cmp);
            for (i = 0; i < n; i++)
                cout << str[i] << endl;
        }
        return 0;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    python openpyxl 封装Execl常用操作的方法
    python webdriver grid多节点运行webdriver程序
    url的正则表达式
    基于Erlang VM的函数式编程语言Elixir
    [整理]团队开发效率提升探索一
    FreeBSD应该装gnome3做桌面
    FreeBSD pkg仓库有台湾的镜像了
    再探OAuth2
    【转】Android世界的Swift
    内存只有4G的MBP要怎么破
  • 原文地址:https://www.cnblogs.com/l609929321/p/6601742.html
Copyright © 2020-2023  润新知