1. 程式人生 > >PAT乙級試題整理(二)——牛客網20分真題整理

PAT乙級試題整理(二)——牛客網20分真題整理

牛客網上 共有真題六套,其中每套題有15分題一道,20分題目3道,25分題目1道,共計100分。考試時要求考生在180分鐘內完成,依照陳越姥姥的說法,要在30分鐘內拿下乙級20分題目,所以我們這篇主要想辦法怎麼儘量縮短自己的做題時間。我之前只學過Java和C#,沒有學過C語言,粗淺學習了一下C語言基本語法,想借刷題這個機會好好體會一下面向過程的設計語言的精髓,因此在第一部分用了C語言做,做完之後發現。。。我還是用Java吧。依照前面的計劃: 1.先說題目思路,2.再貼上自己的垃圾程式碼,做一番自我批評,3.然後貼上我認為的經典程式碼,分析一番以便學習。通過這樣的三個步驟希望提高自己的水平,也為後面開始做25分題做準備。

先說方法

——讀題後列出虛擬碼

很多情況下,我們讀題之後就想開啟vc直接上手做題,面對比較簡單的題目,這樣的做法也無可厚非;但作為一個剛剛接觸演算法題,並且是一個非本專業的新手,養成一個良好的做演算法題的習慣就顯得尤為重要。這裡我隨便用一道題目,來分享一下我寫虛擬碼的心路歷程。
牛客網 乙級真題1022 挖掘機技術哪家強

這裡為了方便我就截圖了
這裡寫圖片描述
這裡寫圖片描述
拿到題目感覺簡單不要著急,將我們的虛擬碼分成三部分,按照 輸入->處理->輸出 的步驟進行分解:
輸入階段:學生總個數n;學校既要編號又要分數,我們考慮建立一維陣列school[],學校編號是陣列序號;考生不多說二維陣列stu[n][2],我們就按照這個進行輸入;
處理階段:遍歷考生陣列,給school[stu[i][0]] + stu[i][1],迴圈完畢即可;
輸出階段:比較找出school陣列最大值,輸出其編號及其最大值。
程式碼:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
    //輸入
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] input = new int[n][2];
        int[] school = new int[1000000];
        for(int i = 0; i< n; i++) {
            input[i][0
] = in.nextInt(); input[i][1] = in.nextInt(); } //處理 for(int i = 0; i< n; i++) { school[input[i][0]] += input[i][1]; } //輸出 int max = school[0]; int maxNum = 0; for(int i = 0; i < school.length; i++) { if(school[i] > max) { max = school[i]; maxNum = i; } } System.out.println(maxNum+" "+max); } }

也就這麼幾行程式碼,簡介清楚,下面給出別人用C寫的程式碼,很簡短,可參考:

#include<stdio.h>
int main() {
    int i,sno,sco,k = 0,N;
    scanf("%d",&N);
    int scores[100050];
    for(i = 0; i < 100050; i ++) scores[i] = 0;
    for(i = 0; i < N; i ++) {
        scanf("%d %d",&sno,&sco);
        scores[sno] += sco;
        if(scores[sno] >= scores[k]) k = sno;
    }
    printf("%d %d\n",k,scores[k]);
    return 0;
}

需要補充的是,上面的程式碼用的是輸入處理二合一的方法,當然也可行,對記憶體有點影響不過對於執行時間差別並不會很大,而且可能會造成思路上的混亂。同樣的,還可以有處理和輸出二合一的方法,雖然不適用於本題目,但還適用於其他大部分題目,當然,一樣不建議初學者使用。總的來說,初學者用這三步可以簡潔明瞭完成題目,而且這個方法對於乙級題目綽綽有餘,精準快速易於除錯。不過對於面向甲級頂級的考生,可能我這套早就過時了。。。我也是今天報考了秋季甲級,希望在接下來的一週內鞏固好乙級基礎知識,為甲級演算法打好基礎。

今天實在喝多了,有空再更。。。