• toj 2807 Number Sort


    2807.   Number Sort
    Time Limit: 10.0 Seconds   Memory Limit: 65536K
    Total Runs: 469   Accepted Runs: 160



    Given you N positive integers, your job is to output these N numbers in the ascending order in every digit (if two numbers in some digit are the same, you should output the smaller one first). For example, there are five numbers 1 11 111 1111 11111. You should output five lines as sample output. If a number doesn't have the ith digit, you can consider its ith digit zero.

    Input

    The input contains several test cases. Each case contains two lines. The first line contains a positive integer N (N ≤ 1000), indicating the length of the sequence. The second line gives N numbers (each number will not exceed 2147483647). If N = 0 it signals the end of the input and isn't considered to be processed.

    Output

    Each case contains several lines. The first line is indicated as sample output. The i + 1 line contains these N numbers in ascending order in the ith digit.

    Sample Input

    5
    1 11 111 1111 11111
    7
    19 28 37 46 55 55 45
    0

    Sample Output

    Case 1:
    1 11 111 1111 11111
    1 11 111 1111 11111
    1 11 111 1111 11111
    1 11 111 1111 11111
    1 11 111 1111 11111
    Case 2:
    45 55 55 46 37 28 19
    19 28 37 45 46 55 55

    Problem Setter: mmatch@TJU

    Source: TJU Programming Contest 2007 Preliminary


    Submit   List    Runs   Forum   Statistics

    //
    #include <iostream>
    #include 
    <algorithm>
    #include 
    <cmath>
    #define MAX 1002
    using namespace std;
    int data[MAX],ddd[MAX];
    struct node
    {
        
    int num;
        
    int dd;
        
    int da;
    }s[MAX];
    bool comp(node a,node b)
    {
        
    if(a.dd!=b.dd)
            
    return a.dd<b.dd;
        
    else
            
    return a.da<b.da;
    }
    int n;
    int main()
    {
        
    int i,MM,j,zzz=1,k;
        
    while(scanf("%d",&n)!=EOF && n)
        {
            MM
    =-1;
            
    for(i=0;i<n;i++)
            {
                scanf(
    "%d",&data[i]);
                ddd[i]
    =data[i];
                
    if(data[i]>MM)
                    MM
    =data[i];
            }
            
    int nn=0;
            
    while(MM!=0)
            {
                MM
    =MM/10;
                nn
    ++;
            }
            
    int cs=10;
            printf(
    "Case %d:\n",zzz++);
            
    for(i=0;i<nn;i++)
            {
                
    for(j=0;j<n;j++)
                {
                    s[j].num
    =j;
                    s[j].da
    =data[j];
                    s[j].dd
    =ddd[j]%cs;
                    ddd[j]
    =ddd[j]/10;
                }
                sort(s,s
    +n,comp);
                printf(
    "%d",data[s[0].num]);
                
    for(k=1;k<n;k++)
                {
                    printf(
    " %d",data[s[k].num]);
                }
                printf(
    "\n");
            }
        }
        
    return 0;
    }
  • 相关阅读:
    如何获取汉字对应的拼音
    php each()函数和list()函数
    php list()函数
    addslashes给预定义字符前面加上反斜杠
    array_filter() 过滤数组中的空白元素
    用.htaccess文件实现URL重写
    xml中实体引用
    onsubmit阻止表单提交
    php获取当前文件绝对路径
    array_merge() 函数的用法
  • 原文地址:https://www.cnblogs.com/forever4444/p/1456960.html
Copyright © 2020-2023  润新知