1. 程式人生 > >PAT乙級(Basic)題庫---1012

PAT乙級(Basic)題庫---1012

題目

解題思路

開始根據switch結構給五類正整數分類,使用不同的變數記錄根據不同分類下執行的相應結果,其中A4需要求精確到小數點後1位的平均數,因此使用double型別來初始化。由於其中兩類的操作需要記錄該類正整數的個數,我們可以使用額外的變數輔助記錄。在這裡我使用了a2num記錄A2型別數個數,判斷進行加法還是減法操作,同時用來判斷是否存在A2型別數。使用a2num判斷是否存在A2型別數的原因是交錯求和的結果可能會與A2的初始化相同,無法判斷是否存在該類數。

程式碼

#include<iostream>
#include<sstream>
#include<algorithm>
#include<string> #include<stack> #include<iomanip> using namespace std; int main() { //a2num記錄A2型別數個數,判斷進行加法還是減法操作,同時用來判斷是否存在A2型別數 //a4num記錄A4型別數個數,用來求平均數 int n,x,a1=0,a2=0,a3=0,a5=0,a2num=0,a4num=0; double a4=0.0; cin>>n; while(n--) { cin>>x; switch
(x%5) { case 0: if(x%2==0) { a1+=x; } break; case 1: if(a2num%2) { a2-=x; } else { a2+=x; } a2num++; break
; case 2: a3++; break; case 3: a4+=x; a4num++; break; case 4: if(x>a5) { a5=x; } break; } } if(a1==0) { cout<<"N"; } else { cout<<a1; } //只有交錯求和的結果可能與初始值相同,因此用是否存在這類數字來判斷 if(a2num==0) { cout<<" N"; } else { cout<<" "<<a2; } if(a3==0) { cout<<" N"; } else { cout<<" "<<a3; } if(a4==0.0) { cout<<" N"; } else { //精確到小數點後1位 cout<<" "<<fixed<<setprecision(1)<<a4/a4num; } if(a5==0) { cout<<" N"; } else { cout<<" "<<a5; } }