20200613-04 PAT 甲級試題 03 List Grades

思路講解

本題的核心在於排序(降序)
所以可以選用比較常見的幾種排序算法,如冒泡,快排,插入,選擇等等
快速排序詳解
冒泡法詳解

這裏選用遞歸類型的快速排序法,具體詳細看代碼

源碼

#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
#include <tuple>
#include <iostream>

using namespace std;

void sort_quick_r(vector<tuple<string, string, int>> & array, int left, int right)
{
    int tmp = get<2>(array[left]);
    auto v = array[left];
    int p = left;
    int i = left, j = right;
    while (i <= j) {
        while (get<2>(array[j]) <= tmp && j >= p)
            j--;

        if (j >= p) {
            array[p] = array[j];
            p = j;
        }

        while (get<2>(array[i]) >= tmp && i <= p)
            i++;
        if (i <= p) {
            array[p] = array[i];
            p = i;
        }
    }

    array[p] = v;
    if (p - left > 1)
        sort_quick_r(array, left, p-1);

    if (right - p > 1)
        sort_quick_r(array, p+1, right);
}


int main() {
    int n_counts {0};
    int max_grade {0}, min_grade {0};
    //這個是 C++ 的一個類型 tuple 一個結構體,具體可以查找官方文檔
    vector<tuple<string, string, int>> student_records;
	//讀取輸入值
    scanf("%d", &n_counts);
    char temp_name[10];
    char temp_id[10];
    int temp_grade {0};
    while (n_counts--) {
        scanf("%s %s %d", temp_name, temp_id, &temp_grade);
        student_records.push_back(make_tuple(temp_name, temp_id, temp_grade));
        //對於兩個數組進行初始化
        memset(temp_id, 0, sizeof (temp_id));
        memset(temp_name, 0, sizeof (temp_name));
    }
    scanf("%d %d", &min_grade, &max_grade);
    //排序 降序
    sort_quick_r(student_records, 0, student_records.size() - 1);
    //去除數據範圍之外的數據

    //記錄打印數量
    auto printf_count {0};
    for (const auto & temp : student_records) {
        auto _grade = get<2>(temp);
        //打印滿足要求的值
        if (_grade <= max_grade && _grade >= min_grade) {
            cout << get<0>(temp) << " " << get<1>(temp) << endl;
            printf_count++;
        }
    }
    //沒有任何符合要求的項,輸出 NONE
    if (0 == printf_count) {
        cout << "NONE" <<endl;
    }
    return 0;
}

推薦課程

尹成老師帶你學算法


數據結構核心原理與算法應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章