zoukankan      html  css  js  c++  java
  • HDU 5427 A problem of sorting 水题

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=5427

    A problem of sorting

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 1447    Accepted Submission(s): 554


    Problem Description
    There are many people's name and birth in a list.Your task is to print the name from young to old.(There is no pair of two has the same age.)
     
    Input
    First line contains a single integer T100 which denotes the number of test cases. 

    For each test case, there is an positive integer n(1n100) which denotes the number of people,and next n lines,each line has a name and a birth's year(1900-2015) separated by one space.

    The length of name is positive and not larger than 100.Notice name only contain letter(s),digit(s) and space(s).
     
    Output
    For each case, output n lines.
    Sample Input
    2
    1
    FancyCoder 1996
    2 FancyCoder 1996
    xyz111 1997
     
     
    Sample Output
    FancyCoder
    xyz111
    FancyCoder

    题解:

      被水题pe了一早上,学了个fgets来取代gets,据说后者不太安全,最好不要用。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 const int maxn = 111;
     8 
     9 char name[maxn][maxn];
    10 int age[maxn];
    11 int ran[maxn];
    12 
    13 int n;
    14 
    15 bool cmp(int x, int y) {
    16     return age[x] > age[y];
    17 }
    18 
    19 void init() {
    20 
    21 }
    22 
    23 int main() {
    24     int tc;
    25     scanf("%d", &tc);
    26     while (tc--) {
    27         //用scanf("%d
    ",&n);代替以下两行会PE。 
    28         scanf("%d", &n);
    29         getchar();
    30         for (int i = 0; i < n; i++) {
    31             //fgets得到的字符串,在''之前会多一位'
    '! 
    32             fgets(name[i], sizeof(name[i]), stdin);
    33 //            gets(name[i]); 不安全,不要用 
    34             int len = strlen(name[i]);
    35             age[i] = 0;
    36             for (int j = len - 5; j < len-1; j++) {
    37                 age[i] = age[i] * 10 + name[i][j] - '0';
    38             }
    39             name[i][len - 6] = '';
    40         }
    41         for (int i = 0; i < n; i++) {
    42             //printf("str:%s.age:%d
    ", name[i],age[i]);
    43         }
    44         for (int i = 0; i < n; i++) ran[i] = i;
    45         sort(ran, ran + n, cmp);
    46         for (int i = 0; i < n; i++) {
    47             int x = ran[i];
    48             printf("%s
    ", name[x]);
    49         }
    50     }
    51     return 0;
    52 }
    View Code
  • 相关阅读:
    南邮NOJ没有被接待的童鞋
    南邮NOJ 1014 数据的插入与删除
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    南邮NOJ开灯问题
    南邮NOJ偷吃可耻
    【HDOJ】1166 敌兵布阵
    【HDOJ】1180 诡异的楼梯
  • 原文地址:https://www.cnblogs.com/fenice/p/5265300.html
Copyright © 2011-2022 走看看