• PAT 乙级 1012 数字分类 (20) C++版


    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的数字中最大数字。

      输入格式:

      每个输入包含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

    难点:处理不存在的情况,定义一个标志量来标志这种类型的数是否存在,从而用对应的输出,如果用结果0来衡量是不行的,因为A2中特殊的情况就是两个数相等,结果也是为0

     1 // 1012.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream>
     6 #include<iomanip>
     7 #include<typeinfo>
     8 
     9 using namespace std;
    10 
    11 int main()
    12 {
    13     int N, A[5] = { 0 }, j = 1, num = 0, max = 0, dig[5] = { 0 };
    14 
    15     cin >> N;
    16 
    17     int *p = new int[N];
    18 
    19     for (int i = 0; i < N; i++)
    20     {
    21         cin >> p[i];
    22 
    23         switch (p[i] % 5)
    24         {
    25         case 0:
    26             if ((p[i] & 1) == 0)
    27             {
    28                 A[0] += p[i];
    29                 dig[0] = 1;
    30             }
    31             break;
    32         case 1:
    33             A[1] += p[i] * j;
    34             j = -j;
    35             dig[1] = 1;
    36             break;
    37         case 2:
    38             A[2]++;
    39             dig[2] = 1;
    40             break;
    41         case 3:
    42             A[3] += p[i];
    43             num++;
    44             dig[3] = 1;
    45             break;
    46         case 4:
    47             if (p[i] > max)
    48                 max = p[i];
    49             dig[4] = 1;
    50             break;
    51         default:break;
    52         }
    53     }
    54 
    55     A[4] = max;
    56 
    57     for (int i = 0; i < 5; i++)
    58     {
    59         if (dig[i])
    60         {
    61             if (i != 3)
    62                 cout << A[i];
    63             else
    64                 cout << fixed << setprecision(1) << static_cast<double>(A[3]) / num;
    65         }
    66         else
    67             cout << "N";
    68 
    69         if (i != 4)
    70             cout << " ";
    71     }
    72 
    73     delete[] p;
    74 
    75     return 0;
    76 }
  • 相关阅读:
    欧几里得算法&&扩展欧几里得算法
    POJ-1006 Biorhythms (生物节律)
    第3周实践项目7 删除链表元素最大值
    第3周实践项目1 顺序表的基本运算
    第三周项目4(2)-顺序表应用 将所有奇数移到所有偶数前面
    第3周实践项目5 -顺序表的应用 拆分单链表
    SDUT-2144 图结构练习——最小生成树
    SDUT-3362 数据结构实验之图论六:村村通公路
    Codeforces Round #616 (Div. 2)题解
    1.29 educational round 81
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/7146246.html
Copyright © 2020-2023  润新知