PAT乙級(Basic)題庫---1012
阿新 • • 發佈:2019-01-26
題目
解題思路
開始根據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;
}
}