1. 程式人生 > >PAT 乙級 25 分題

PAT 乙級 25 分題

  • 1005 繼續(3n+1)猜想 (25)

測試點 3,4 段錯誤。因為對陣列下標限制的判斷寫錯了,應該寫在取陣列元素的前面。

if(tmp<maxn&&cnt[tmp]==1)
  • 1010 一元多項式求導 (25)

如果第一次就輸入 0 多項式,那就輸出 0 0。否則 0 多項式不輸出。

  • 1015 德才論 (25)

模擬排序題。比較簡單。

  • 1020 月餅 (25)

測試點 2 錯誤。這個題前兩個輸入說是正整數,後面的輸入只說了是正數,所以要用 double 來儲存。int 改成 double 測試點 2 就過了。

  • 1025 反轉連結串列 (25)

測試點 6 錯誤。因為輸入裡可能有無效的結點。

例如這種輸入:

00000 6 3
00000 1 11111
11111 2 22222
22222 3 -1
33333 4 44444
44444 5 55555
55555 6 -1
  • 1030 完美數列(25)

測試點 3 錯誤。

應該是 n = 1 的資料:

1 2
7

我用的是二分的辦法。ans 最小值應為 1。

  • 1035 插入與歸併(25)

測試點 3,5,6 出錯。

這個題花了我兩個多小時。

我看了演算法筆記,說原始序列不算中間序列。但題目裡並沒有給出這種保證。

所以我開始想的是,先比較原陣列和結果陣列,如果相等,就做一次插入排序。然後輸出。

但是對這種資料就不行:

4
2 3 1 4
2 3 1 4

對於插入排序來說,2 3 1 4 的下一輪,還是 2 3 1 4,再下一輪就是 1 2 3 4。

因為第一輪是正常序列,不需要排序。所以我開始還準備設一個 flag,如果排序一輪後這輪沒變化,就再做一次排序。

但答案好像沒有這個意思。只是說原陣列不算中間序列。

於是就是第一輪,排序,然後比較,如果相同,就再一輪,輸出。

另一個讓我花了很長的時間的是,歸併排序的迴圈條件,我一直記不得。也是沒有理解。外層迴圈是 step=2;step/2<n;step*-2;

,內層迴圈是 i = 0;i<n;i+=step

  • 1040 有幾個PAT(25)

測試點 3,4錯誤。因為忘了對 1000000007 取餘數。而且中途需要用 long long 儲存相乘的結果,免得溢位。

  • 1045 快速排序(25)

測試點 2,格式錯誤。在輸入結果為0的時候,還要再輸出一個空行。

void print(vector<int> vv){
    printf("%lu\n",vv.size());
    for(int i=0;i<vv.size();i++){
        printf("%d",vv[i]);
        if(i<vv.size()-1)printf(" ");
    }
    if(vv.size()==0)printf("\n");
}
  • 1050 螺旋矩陣(25)

測試點 1,3,7 浮點錯誤。因為 m 和 n 沒算對。

  • 1055 集體照 (25)

這題用 vector 儲存排序後應該輸出的每行的下標。

  • 1060 愛丁頓數(25)

測試點 3 出錯。因為如果是這樣的資料:

3
0 0 0

那答案應該是 0 天 超過 0 公里。

這個題目 E 天超過 E 公里,我開始很難理解,看了別人的題解才懂了一點。

從大往小掃描 2 3 6 6 7 7 8 8 9 10 

10,表示 1 天超過 1 公里。
9,2 天超過 2 公里。
8,3 天超過 3 英里
8,4 天超過 4 英里
7,5 天超過 5 英里
7,6 天超過 6 英里
6,7天超過7英里(矛盾)

也就是 E = 6。
  • 1065 單身狗(25)

這題用集合來做。遍歷集合的程式碼 set<int> iterator it=ss.begin();it!=ss.end();it++

  • 1070 結繩(25)

這題也一個排序數學題。

  • 1075 連結串列元素分類(25)

套路明顯,比較簡單。

  • 1080 MOOC期終成績 (25)

測試點 3 出錯。

我開始是這麼寫的:

        if(stu[i].mg==0)printf(" -1");
        else printf(" %d",stu[i].mg);
        if(stu[i].fg==0)printf(" -1");
        else printf(" %d",stu[i].fg);

我把所有人的期中期末設為0,如果最後還是0,就表示他沒考,輸出-1。

但這是有問題的,萬一一個學生,期中考0分,期末考100分。

應該輸出的是 0 100,而不是 -1 100。

所以加了這一行就好了 stu[order].mg=stu[order].fg=-1;

  • 1085 PAT單位排行 (25)

模擬排序題。