PAT乙级-1012 数字分类
馨er BOSS

模拟

题目

给定一系列正整数,请按要求对数字进行分类,并输出以下 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 的数字中最大数字。

输入格式:

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

输出格式:

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

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

输入样例 1:

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

输出样例 1:

1
30 11 2 9.7 9

输入样例 2:

1
30 11 2 9.7 9

输出样例2 :

1
8 1 2 4 5 6 7 9 16

题解

我乱糟糟的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <bits/stdc++.h>
using namespace std;
int a1, a3, a4, a5, i, j;
int main()
{
int n, m;
cin >> n;
vector<int> a2(n);
while (n--)
{
cin >> m;
if (m % 2 == 0 && m % 5 == 0)
a1 += m;
if (m % 5 == 1)
a2[i++] = m;
if (m % 5 == 2)
a3++;
if (m % 5 == 3)
{
a4 += m;
j++;
}
if (m % 5 == 4 && a5 < m)
a5 = m;
}
int b1 = a2[0];
double b2;
if (a4 != 0)
b2 = (double)a4 / j;
else
b2 = 0;
for (int k = 1; k < i; k++)
{
if (k % 2 == 1)
b1 -= a2[k];
else
b1 += a2[k];
}
if (a1 != 0)
cout << a1;
else
cout << "N";
cout << " ";
if (b1 != 0 || i != 0)
cout << b1;
else
cout << "N";
cout << " ";
if (a3 != 0)
cout << a3;
else
cout << "N";
cout << " ";
if ((int)b2 != 0)
printf("%.1lf", b2);
else
cout << "N";
cout << " ";
if (a5 != 0)
cout << a5;
else
cout << "N" << endl;
return 0;
}

柳神的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, num, A1 = 0, A2 = 0, A5 = 0;
double A4 = 0.0;
cin >> n;
vector<int> v[5];
for (int i = 0; i < n; i++)
{
cin >> num;
v[num % 5].push_back(num);
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < v[i].size(); j++)
{
if (i == 0 && v[i][j] % 2 == 0)
A1 += v[i][j];
if (i == 1 && j % 2 == 0)
A2 += v[i][j];
if (i == 1 && j % 2 == 1)
A2 -= v[i][j];
if (i == 3)
A4 += v[i][j];
if (i == 4 && v[i][j] > A5)
A5 = v[i][j];
}
}
for (int i = 0; i < 5; i++)
{
if (i != 0)
printf(" ");
if (i == 0 && A1 == 0 || i != 0 && v[i].size() == 0)
{
printf("N");
continue;
}
if (i == 0)
printf("%d", A1);
if (i == 1)
printf("%d", A2);
if (i == 2)
printf("%d", v[2].size());
if (i == 3)
printf("%.1f", A4 / v[3].size());
if (i == 4)
printf("%d", A5);
}
return 0;
}

题目链接

  • 本文标题:PAT乙级-1012 数字分类
  • 本文作者:馨er
  • 创建时间:2021-05-03 15:41:00
  • 本文链接:https://sjxbbd.vercel.app/2021/05/03/2a2420390df8/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!