zoukankan      html  css  js  c++  java
  • 排序入门练习题9 合影效果 题解

    题目出处:《信息学奥赛一本通》第二章上机练习7

    题目描述

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

    输入格式

    第一行是人数 (n(2 le n le 100)) ,且至少有一个男生和一个女生。
    后面紧跟 (n) 行,每行输入一个人的性别(男 male 或 女 female ,说明:"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.7 1.61 1.56
    

    题目分析

    这道题目使用结构体排序做。其思想和“整数奇偶排序”类似。
    首先我们要开一个结构体 Node ,他的 ch 用于标识性别, h 用于标识身高;并在定义的同时初始化结构体数组 a

    struct Node {
        char ch[8]; // 性别
        double h;   // 身高
    } a[101];
    

    比较函数按照“男在前,女在后;男生从矮到高排,女生从高到矮排”的规则来编写:

    bool cmp(Node a, Node b) {
        if (strcmp(a.ch, b.ch) != 0)    // 如果性别不同
            return strcmp(a.ch, "male") == 0;   // 男生排前面
        else if (strcmp(a.ch, "male") == 0) // 如果都是男生
            return a.h < b.h;   // 矮的排前面
        else    // 否则(都是女生)
            return a.h > b.h;   // 高的排前面
    }
    

    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    struct Node {
        char ch[8]; // 性别
        double h;   // 身高
    } a[101];
    int n;
    bool cmp(Node a, Node b) {
        if (strcmp(a.ch, b.ch) != 0)    // 如果性别不同
            return strcmp(a.ch, "male") == 0;   // 男生排前面
        else if (strcmp(a.ch, "male") == 0) // 如果都是男生
            return a.h < b.h;   // 矮的排前面
        else    // 否则(都是女生)
            return a.h > b.h;   // 高的排前面
    }
    int main() {
        cin >> n;
        for (int i = 0; i < n; i ++) cin >> a[i].ch >> a[i].h;
        sort(a, a+n, cmp);
        for (int i = 0; i < n; i ++) {
            if (i) putchar(' ');
            printf("%.2f", a[i].h);
        }
        cout << endl;
        return 0;
    }
    
  • 相关阅读:
    【新特性速递】数字输入框的前缀和后缀(位于输入框内部)
    【新特性速递】进度条,进度条,进度条
    【新特性速递】当法语遇上FineUI(Bonjour)!
    【新特性速递】自定义数字输入框的小数分隔符和千分位分隔符
    【经验分享】FineUICore中如何处理文件导出异常?
    【网友作品】服装分销系统架构与界面分享(基于FineUICore基础版)
    FineUIPro/Mvc/Core v6.3.0 正式发布了!
    星球居民突破 1700 人!
    【新特性速递】开关样式复选框增强!
    【新特性速递】为RenderField新增QuickSortField属性!
  • 原文地址:https://www.cnblogs.com/zifeiynoip/p/11450524.html
Copyright © 2011-2022 走看看