题目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;
}

时间: 2024-12-19 00:49:24

题目1190:大整数排序的相关文章

1190.大整数排序

题目描述: 对N个长度最长可达到1000的数进行排序. 输入: 输入第一行为一个整数N,(1<=N<=100).接下来的N行每行有一个数,数的长度范围为1<=len<=1000.每个数都是一个正数,并且保证不包含前缀零. 输出: 可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行. 样例输入: 3 11111111111111111111111111111 2222222222222222222222222222222222 33333

题目:大整数乘法、除法,楼梯走法,数组中不同数字,超过一半数字(好)

大整数乘法,可以用单个数字想乘,跟踪进位信息来处理. 大整数除法,可以先把除数增大到跟被除数相同的量级,然后累计相减.比如 555 / 3,就先把3增大到300,555能够减1次,那么结果+100,被除数变成255,依次进行. 楼梯走法:一次走一级,或者走两级.没什么难度. 数组中不同数字:如果是2n+1数组找出不同的那个数字,用异或就可以. 如果是找出超出一般数目的数字,用遍历,看到不一样的,就一起删除,这样的方式. 上网搜了一下,找出了更好的方法: 用变量记录备选数字,一个计数器记录该数字剩

华科机考:大整数排序

时间限制:1秒  空间限制:32768K 题目描述 对N个长度最长可达到1000的数进行排序. 输入描述: 输入第一行为一个整数N,(1<=N<=100). 接下来的N行每行有一个数,数的长度范围为1<=len<=1000. 每个数都是一个正数,并且保证不包含前缀零. 输出描述: 可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行. 输入例子: 3 11111111111111111111111111111 22222222222222

大整数排序

题目描述 对N个长度最长可达到1000的数进行排序. 输入描述: 输入第一行为一个整数N,(1<=N<=100). 接下来的N行每行有一个数,数的长度范围为1<=len<=1000. 每个数都是一个正数,并且保证不包含前缀零. 输出描述: 可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行. 分析 位数不相等时,位数少的小 位数相等时,字符串排序结果和数的排序结果相同 #include <iostream> #include

codeup-大整数排序

Problem E: 大整数排序 Time Limit: 1 Sec  Memory Limit: 32 MBSubmit: 433  Solved: 198[Submit][Status][Web Board][Creator:Imported] Description 对N个长度最长可达到1000的数进行排序. Input 输入第一行为一个整数N,(1<=N<=100).接下来的N行每行有一个数,数的长度范围为1<=len<=1000.每个数都是一个正数,并且保证不包含前缀零.

题目1117:整数奇偶排序 (2008年北京大学图形实验室计算机研究生机试真题)

题目描述: 输入10个整数,彼此以空格分隔.重新排序以后输出(也按空格分隔),要求:1.先输出其中的奇数,并按从大到小排列:2.然后输出其中的偶数,并按从小到大排列. 输入: 任意排序的10个整数(0-100),彼此以空格分隔. 输出: 可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔. 样例输入: 4 7 3 13 11 12 0 47 34 98 样例输出: 47 13 11 7 3 0 4 12 34 98 提示: 1. 测试数据可能有很多组,请使用while(cin>>

C/C++算法竞赛入门经典Page11 例题1-5 三整数排序

题目:输入3个整数,从小到大排序后输出 样例输入: 20 7 33 样例输出: 7 20 33 首先,先声明三个整数a,b,c和一个临时变量t: int a,b,c,t;//1,b,c为三个整数,t为临时变量 输入三个整数: scanf("%d%d%d",&a,&b,&c); 进行3次if判断: 1.如果b>a,则a,b对调 2.如果c>a,则a,c对调 3.如果c>b,则b,c对调 代码: if(b>=a){ t=b; b=a; a=t

蓝桥杯 - 第二大整数 (逻辑判断 循环语句)

算法提高 第二大整数 时间限制:1.0s   内存限制:512.0MB 问题描述 编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束.然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来.说明:(1)0表示输入结束,它本身并不计入这组整数中.(2)在这组整数中,既有正数,也可能有负数.(3)这组整数的个数不少于2个. 输入格式:输入只有一行,包括若干个整数,中间用空格隔开,最后一个整数为0. 输出格式:输出第二大的那个整数. 输入输出样例 样例输入 5 8 -1

九度oj 题目1023:EXCEL排序

题目1023:EXCEL排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:20699 解决:4649 题目描述:     Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. 对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始).随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序:当 C=2时,按姓名的非递减字典序排序:当 C=3 时,按成绩的非递减排序.当若干学生具有相同姓名或者相同成绩时,则按他们的学号