题目1190:大整数排序

Posted 九月旧约

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目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;
}

 

以上是关于题目1190:大整数排序的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

ZZNUOJ_用C语言编写程序实现1190:查询记录(结构体专题)(附完整源码)

poj1190 生日蛋糕(深搜+剪枝)

大整数排序

bzoj1190[HNOI2007]梦幻岛宝珠 分层背包dp

华科机考:大整数排序