Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define N 10005
  6.  
  7. int apartment_number[N];
  8. char *money[N];
  9. int apartments = 0;
  10.  
  11. int compare_apartments(const void *p1, const void *p2) {
  12.   int ind1 = *((int *)p1);
  13.   int ind2 = *((int *)p2);
  14.   if (ind1 == ind2) return 0;
  15.  
  16.   char *a1 = money[ind1];
  17.   char *a2 = money[ind2];
  18.  
  19.   if (a1[0] != a2[0]) return (int)a1[0] - (int)a2[0];
  20.  
  21.   int size1 = strlen(a1);
  22.   int size2 = strlen(a2);
  23.  
  24.   int i1 = 1;
  25.   int i2 = 1;
  26.   while (i1 < size1 && a1[i1] == '0') i1++;
  27.   while (i2 < size2 && a2[i2] == '0') i2++;
  28.  
  29.   if (size1 - i1 != size2 - i2) return (size2 - i2) - (size1 - i1);
  30.  
  31.   while (i1 < size1 && i2 < size2 && a1[i1] == a2[i2]) {
  32.     i1++;
  33.     i2++;
  34.   }
  35.   if (i1 == size1) return 0;
  36.   return (int)a2[i2] - (int)a1[i1];
  37. }
  38.  
  39. int main() {
  40.   int n = 0;
  41.   int status = scanf(" %d ", &n);
  42.   while (status != -1) {
  43.     scanf(" %m[A-Z0-9] ", &money[n]);
  44.     apartment_number[apartments] = n;
  45.     apartments++;
  46.     status = scanf(" %d ", &n);
  47.   }
  48.   qsort(apartment_number, apartments, sizeof(int), compare_apartments);
  49.   for (int i = 0; i < apartments; ++i) {
  50.     printf("%d ", apartment_number[i]);
  51.     free(money[apartment_number[i]]);
  52.   }
  53.   return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement