PTA-7-12 排序,7-13 工齡統計(快速排序)

這兩個題的話,都是直接考排序,雖然可以直接用庫函數的 sort ,但還是推薦自己手寫一遍快排,這個東西時間久不寫還是容易忘記。

這裏就權當是複習排序的算法了。

7-12 排序

給定N個(長整型範圍內的)整數,要求輸出從小到大排序後的結果。

本題旨在測試各種不同的排序算法在各種數據情況下的表現。各組測試數據特點如下:

數據1:只有1個元素;

數據2:11個不相同的整數,測試基本正確性;

數據3:103個隨機整數;

數據4:104個隨機整數;

數據5:105個隨機整數;

數據6:105個順序整數;

數據7:105個逆序整數;

數據8:105個基本有序的整數;

數據9:105個隨機正整數,每個數字不超過1000。

輸入格式:

輸入第一行給出正整數N(≤105),隨後一行給出N個(長整型範圍內的)整數,其間以空格分隔。

這個題目唯一需要注意的點,就是好好讀題,題目中給出的整數是長整型範圍,所以需要用到 long

完整代碼如下:

/*
    Author: Veeupup
    排序
    我們可以直接用 algorithm 下的 sort
    還是推薦自己把快排可以再寫一遍
 */
#include <cstdio>
#include <cstdint>
#include <algorithm>
using namespace std;

const int maxn = 1e5+5;

int n;
long arr[maxn];

// 複習快排
void quickSort(long *arr, int left, int right) {
    if(left < right) {
        int i = left, j = right;
        long temp = arr[i];
        while (i < j)
        {
            while(i < j && arr[j] > temp)
                j--;
            arr[i] = arr[j];
            while(i < j && arr[i] <= temp)
                i++;
            arr[j] = arr[i];
        }
        arr[i] = temp;
        quickSort(arr, left, i - 1);
        quickSort(arr, i + 1, right);
    }
}

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%ld", &arr[i]);
    }
    // sort(arr, arr+n);
    quickSort(arr, 0, n-1);
    bool flag = false;
    for (int i = 0; i < n; i++)
    {
        if(flag) {
            printf(" %ld", arr[i]);
        }else {
            printf("%ld", arr[i]);
            flag = true;
        }
    }
    return 0;
}

7-13 工齡排序

這個題沒有任何好說的點,使用一個 age[] 數字來保存對應年齡出現的次數即可。

/*
    Author: Veeupup
 */
#include <cstdio>
#include <cstdint>
using namespace std;

const int maxn = 55;

int n, age[maxn];

int main()
{
    freopen("data.txt","r", stdin);
    fill(age, age + maxn, 0);
    scanf("%d", &n);
    int temp;
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &temp);
        age[temp]++;
    }
    for (int i = 0; i < maxn; i++)
    {
        if(age[i] != 0) {
            printf("%d:%d\n", i, age[i]);
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章