PAT乙级1012

1012 数字分类 (20分)

题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805311146147840

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

  • \(A_1\) = 能被 5 整除的数字中所有偶数的和;
  • \(A_2\) = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 \(4 n_1?n_2+n_3?n_4?\);
  • \(A_3\) = 被 5 除后余 2 的数字的个数;
  • \(A_4\) = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
  • \(A_5\) = 被 5 除后余 4 的数字中最大数字。

输入格式:

每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。

输出格式:

对给定的 N 个正整数,按题目要求计算 A1~A5 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若其中某一类数字不存在,则在相应位置输出 N

输入样例1

13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出样例1

30 11 2 9.7 9

输入样例2

8 1 2 4 5 6 7 9 16

输出样例2

N 11 2 N 9

我的理解

理解好题意即可。数据对5取余运算,分类处理。

代码段

#include <stdlib.h>
#include <iomanip>
#include <iostream>

using namespace std;

int main() {
    int T;
    cin >> T;
    int sample[T];
    for (int i = 0; i < T; ++i) {
        cin >> sample[i];
    }
    int A1 = 0, A2 = 0, A3 = 0, A4 = 0, A5 = -1;
    // 控制 A2的交错求和
    int flagA2 = 1;
    // 标志A2 是否进行了计算
    int isSumA2 = false;
    // 标志A4的个数,以便于后面计算平均数
    int counterA4 = 0;
    for (int j = 0; j < T; ++j) {
        int element = sample[j];
        int remainder = element % 5;
        switch (remainder) {
            case 0:
                if (element % 2 == 0) {
                    A1 += element;
                }
                break;
            case 1:
                if (flagA2) {
                    A2 += element;
                    flagA2 = !flagA2;
                    isSumA2 = true;
                } else {
                    A2 -= element;
                    flagA2 = !flagA2;
                    isSumA2 = true;
                }
                break;
            case 2:
                A3++;
                break;
            case 3:
                A4 += element;
                counterA4++;
                break;
            case 4:
                if (A5 < element) {
                    A5 = element;
                }
                break;
            default:
                break;
        }
    }
    if (A1 != 0) {
        cout << A1 << " ";
    } else {
        cout << "N ";
    }
    if (isSumA2) {
        cout << A2 << " ";
    } else {
        cout << "N ";
    }
    if (A3) {
        cout << A3 << " ";
    } else {
        cout << "N ";
    }
    if (A4) {
        float result = (float)A4 / (float)counterA4;
        cout << setiosflags(ios::fixed) << setprecision(1) << result << " ";
    } else {
        cout << "N ";
    }
    if (A5 > -1) {
        cout << A5 << endl;
    } else {
        cout << "N" << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/another-7/p/12170272.html

时间: 2024-08-29 16:06:48

PAT乙级1012的相关文章

PAT乙级 1012. 数字分类 (20)

1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: A3 = 被5除后余2的数字的个数: A4 = 被5除后余3的数字的平均数,精确到小数点后1位: A5 = 被5除后余4的数字中最大数

C++&#183;PAT乙级1012.数字分类 (20/20)

/* 1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: A3 = 被5除后余2的数字的个数: A4 = 被5除后余3的数字的平均数,精确到小数点后1位: A5 = 被5除后余4的数字中最大数字. 输入格式: 每个输入包含1个测试用例.每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的

PAT——乙级1012

1012 数字分类 (20 point(s)) 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A?1?? = 能被 5 整除的数字中所有偶数的和: A?2?? = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n?1???n?2??+n?3???n?4???: A?3?? = 被 5 除后余 2 的数字的个数: A?4?? = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位: A?5?? = 被 5 除后余 4 的数字中最大数字. 输入格式: 每个

PAT乙级.1012.数字分类

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: A3 = 被5除后余2的数字的个数: A4 = 被5除后余3的数字的平均数,精确到小数点后1位: A5 = 被5除后余4的数字中最大数字. 输入格式: 每个输入包含1个测试用例.每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数.数字间以空格分隔. 输出格式:

PAT 乙级 1012

最后一个测试点怎么也过不了,问题在于A2的判断,不能单纯地以0作为判断条件:假设满足A2条件的只有两个数6和6,计算结果仍然是0,但是输出A2的值是0不是'N',因此需要给A2加一个计数变量作为判断条件 #include <iostream> #include <vector> #include <cstdio> using namespace std; int main() { vector<int> num; int n = 0; cin >>

PAT 乙级真题 1012.D进制的A+B

PAT 乙级真题 1012.D进制的A+B 题目描述 输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数. 输入格式 输入在一行中依次给出3个整数A.B和D. 输出格式 输出A+B的D进制数. 输入样例 123 456 8 输出样例 1103 题目思路 #include<bits/stdc++.h> #define ll long long int using namespace std; int main() { ll a,b

1054. 求平均值 (20)-PAT乙级真题

今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org/course/zju-93001#/info :然后就是跟着<算法之美>也要同步看完. 然后就在PAT上随便做一道题,这是第一次通过AC,发现了两个比较好的博客主页:http://www.liuchuo.net/  和  https://www.joyhwong.com/   都总结了刷题的过程

PAT乙级1034. 有理数四则运算(20)

本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0. 输出格式: 分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和.差.积.商.注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分:若为负数,则须加括号:若除法分母为0,则输出“Inf”.题目保证正确的输出中没

PAT乙级1006题python3代码

PAT乙级1006题python3代码 目录 PAT乙级1006题python3代码 目录 代码 题目: 让我们用字母B来表示"百".字母S表示"十",用"12-n"来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它有2个"百".3个"十".以及个位的4. 输入格式:每个测试输入包含1个测试用例,给出正整数n(<1000). 输出