PAT乙级(Basic)题库---1012

题目

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;
    }
}

猜你喜欢

转载自blog.csdn.net/h928066986/article/details/81141818