PAT乙级1012——数字分类

题目:

题目详情 - 1012 数字分类 (20 分) (pintia.cn)

 

这道题比较简单,就是按照数字除5的余数把数字分类,再在各个类下对数字做相应的操作——用的是switch结构。当然,普通if语句也是可以的

注意题目这句话很重要:若其中某一类数字不存在,则在相应位置输出 N

 

看了一下这个哥们的,没有搞清楚用数组的意义是什么:PAT乙级1012 - 臭咸鱼 - 博客园 (cnblogs.com)

我原本的代码是:只过了两个测试点,然而我没有找出问题在哪:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int N;
    cin>>N;//需要处理的数字的个数 
    
    int a1=0,a2=0,a3=0,a5=0;
    float a4=0;
    int num;
    int sign=1;
    int time=0;
    for (int i=0;i<N;i++)
    {
        cin>>num;
        int remainder=num%5;
        switch(remainder)
        {
            case 0:  //能够被5整除
                if(num%2==0)//是偶数
                {
                    a1+=num;
                 }
                break;
            case 1:
                a2+=sign*num;
                sign=-sign;
                break;
            case 2:
                a3+=1;
                break;
            case 3:
                a4+=num;
                time+=1;
                break;
            case 4:
                if (num>a5)
                {
                    a5=num;
                }
                break;
        }
    }
    cout<<a1<<' '<<a2<<' '<<a3<<' ';
    cout<<fixed<<setprecision(1)<<a4/time<<' ';
    cout<<a5;
    return 0;
} 

再次审题之后,原来是没有做“异常处理”:要注意当某一类数字不存在的时候,要输出N——我们怎么知道某一类数字存不存在呢?很容易想到的是:再分别设置五个变量,来储存每一个类中有没有数字被归入为这一类。下面是AC的代码:

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int N;
    cin>>N;//需要处理的数字的个数 
    
    int a1=0,a2=0,a3=0,a5=0;
    float a4=0;
    int a1c=0,a2c=0,a3c=0,a4c=0,a5c=0;
    int num;
    int sign=1;
    int time=0;
    for (int i=0;i<N;i++)
    {
        cin>>num;
        int remainder=num%5;
        switch(remainder)
        {
            case 0:  //能够被5整除
                if(num%2==0)//是偶数
                {
                    a1+=num;
                    a1c++;
                 }
                break;
            case 1:
                a2+=sign*num;
                sign=-sign;
                a2c++;
                break;
            case 2:
                a3+=1;
                a3c++;
                break;
            case 3:
                a4+=num;
                time+=1;
                a4c++;
                break;
            case 4:
                if (num>a5)
                {
                    a5=num;
                }
                a5c++;
                break;
        }
    }
    if (a1c>0)  
        cout<<a1<<' ';
    else
        cout<<"N"<<' ';
    if (a2c>0)  
        cout<<a2<<' ';
    else
        cout<<"N"<<' ';
    if (a3c>0)
        cout<<a3<<' ';
    else
        cout<<"N"<<' ';
    if (a4c>0)
        cout<<fixed<<setprecision(1)<<a4/time<<' ';
    else
        cout<<"N"<<' ';
    if (a5c>0)
        cout<<a5;
    else
        cout<<"N";    
    return 0;
} 

虽然这样看代码有一点又臭又长,但是目前还没有想出有什么更简单的方法。就这样。

 

posted @ 2021-12-10 09:07  EowynTang  阅读(65)  评论(0)    收藏  举报