题目
解题思路
开始根据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;
}
}