PTA刷题Basic篇——1012.数字分类——Day(6)

题目描述

在这里插入图片描述
从一堆数字中,选出符合题目要求的五类数字,如果其中某一类没有任何数字属于它,那么这一类对应的输出是"N"。

题目分析

我本人有个毛病,这种很简单的问题,很快就有了思路,但一般都是硬性求解的办法,所以代码就写得很长,会有一些冗余代码。所以我自己的一定不是最简洁的代码,但方法估计也不会有更优的了,毕竟这道题不涉及什么特殊的技巧,跟着一步一步走就好了。
因为只有固定的五类数据,所以我们可以提前定义五个r1-r5变量代表结果。还要提前定义五个标志变量flag,并初始化为0,某个类别i一旦发生ri的改变,则这个标志变量会变成1,最后我们分别对于标志变量是0的类别,我们输出"N"
我们还要声明两个变量,一个是order,一个是count。
我们发现对于类别2的数据,第一次出现的值前面是正好,第二次是负号,第三次是正号,第四次是负号…所以我们得出结论,第奇数个数据前是正号,第偶数个前是负号,所以order是用来指示第二类数据中的奇偶次序的。
而count是用来指示第四类数据中的数据个数,因为我们要求平均值,所以我们把count声明为double 类型的。
控制精度是小数点后一位的操作是:

cout<<setiosflags(ios::fixed)<<setprecision(1)<<r4 / count_4<<" ";

这是一个固定的控制输出语句,大家可以记下来。但是要先引入iomanip标准库。

代码

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
    int n;
    vector<int>number;
    cin>>n;
    int num;
    for(int i = 0;i < n;i++)
    {
        cin>>num;
        number.push_back(num);
    }
    int r1 = 0,r2 = 0,r3 = 0,r5 = 0;
    int flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0,flag5 = 0;
    double r4 = 0.0;
    int count = 0;
    double count_4 = 0.0;
    for(int j = 0;j < number.size();j++)
    {
        if(number[j] % 5 == 0 && number[j] % 2 == 0)
        {
            r1 += number[j];
            flag1 = 1;
        }
        else if(number[j] % 5 == 1)
        {
            if(count % 2 == 0)
            {
                r2 += number[j];
                count+=1;
            }
            else
            {
                r2 -= number[j];
                count+=1;
            }
            flag2 = 1;
        }
        else if(number[j] % 5 == 2)
        {
            r3 += 1;
            flag3 = 1;
        }
        else if(number[j] % 5 == 3)
        {
            r4 += number[j];
            count_4+=1;
            flag4 = 1;
        }
        else if(number[j] % 5 == 4)
        {
            r5 = number[j] > r5 ? number[j] : r5;
            flag5 = 1;
        }
    }
    if(flag1)
        cout<<r1<<" ";
    else
        cout<<"N ";
    if(flag2)
        cout<<r2<<" ";
    else
        cout<<"N ";
    if(flag3)
        cout<<r3<<" ";
    else
        cout<<"N ";
    if(flag4)
    {
        cout<<setiosflags(ios::fixed)<<setprecision(1)<<r4 / count_4<<" ";
    }
    else
        cout<<"N ";
    if(flag5)
        cout<<r5;
    else
        cout<<"N";
    return 0;
}

总结

答题用时16min
Q12——finish√

发布了60 篇原创文章 · 获赞 2 · 访问量 1067

猜你喜欢

转载自blog.csdn.net/weixin_44755413/article/details/105486111