toj 2807 Number Sort

it2022-05-09  30

 

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 i th 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 ; }

转载于:https://www.cnblogs.com/forever4444/archive/2009/05/14/1456960.html

相关资源:数据结构—成绩单生成器

最新回复(0)