• CCF NOI1051 合影


    问题链接CCF NOI1051 合影




    时间限制: 1000 ms  空间限制: 262144 KB

    题目描述 

      小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?

    输入

      第一行是人数n(2 <= n <= 40,且至少有1个男生和1个女生)。
      后面紧跟n行,每行输入一个人的性别(男male或女female)和身高(浮点数,单位米),两个数据之间以空格分隔。

    输出

      n个浮点数,模拟站好队后,拍照者眼中从左到右每个人的身高。每个浮点数需保留到小数点后2位,相邻两个数之间用单个空格隔开。

    样例输入

    6
    male 1.72
    male 1.78
    female 1.61
    male 1.65
    female 1.70
    female 1.56
    样例输出

    1.65 1.72 1.78 1.70 1.61 1.56

    数据范围限制

     

    提示

     




    问题分析

      这是一个排序问题,排序后输出结果即可

      可以采用男女分别存储排序,分别输出。这里的给出的两个程序就是采用这种方法。

      另外一种方法是所有数据一起排序(需要带上性别),然后两次顺序读一遍(一次从大到小,另外一次从小到大),就可以得到想要的结果。这个思路的程序还没有做。

    程序说明

      这里给出C语言程序和C++语言程序。它们的排序函数不一样,需要注意。

      想比较而言,C++语言的排序函数sort()使用起来比较简洁。

    要点详解

    • 使用宏定义可以使得代码可阅读性增强。
    • C语言的排序函数是qsort(),需要留意用法。
    • C++语言的排序函数是sort(),需要留意用法。



    参考链接:(略)。

    100分通过的C语言程序:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define N 40
    
    float male[N], female[N];
    
    int cmp1( const void *a , const void *b )
    {
        return *(float *)a > *(float *)b ? 1 : -1;
    }
    
    int cmp2( const void *a , const void *b )
    {
        return *(float *)a < *(float *)b ? 1 : -1;
    }
    
    int main(void)
    {
        int n, nm, nf, i;
        char sex[7];
    
        scanf("%d", &n);
        for(i=0,nm=0,nf=0; i<n; i++) {
            scanf("%s%f", sex, &male[nm]);
            if(sex[0] == 'm')
                nm++;
            else
                female[nf++] = male[nm];
        }
    
        qsort(male, nm, sizeof(float), cmp1);
        qsort(female, nf, sizeof(float), cmp2);
    
        for(i=0; i<nm; i++)
            printf("%.2f ", male[i]);
        for(i=0; i<nf; i++)
            printf("%.2f ", female[i]);
        printf("
    ");
    
        return 0;
    }


    100分通过的C++语言程序:

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    
    using namespace std;
    
    const int N = 40;
    
    float male[N], female[N];
    
    int main()
    {
        int n, nm, nf;
        char sex[7];
    
        cin >> n;
        nm = nf = 0;
        for(int i=0; i<n; i++) {
            cin >> sex >> male[nm];
            if(sex[0] == 'm')
                nm++;
            else
                female[nf++] = male[nm];
        }
    
        sort(male, male + nm, less<float>());
        sort(female, female + nf, greater<float>());
    
        for(int i=0; i<nm; i++)
            printf("%.2f ", male[i]);
        for(int i=0; i<nf; i++)
            printf("%.2f ", female[i]);
        printf("
    ");
    
        return 0;
    }



  • 相关阅读:
    Maven入门
    sdk&jdk&jre
    常用git指令
    Spring 3.x 读书笔记
    JAVA多线程---高并发程序设计
    JAVA多线程---ThreadLocal<E>
    JAVA多线程--Thinking in java
    2017年书单
    正则表达式获取多个img src的值
    使用summernote编辑器上传图片,重写onImageUpload
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563866.html
Copyright © 2020-2023  润新知