转跳点:

  这道题差点把我写哭,主要还是自己考虑的不够全面,先看一下题,我再说一下坑。

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

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

  这道题本身很简单,switch case 对5取余,然后给个情况特殊处理一下就完事了,但是这里还有一个坑就是A2 如果 以0 为判断输出‘N’的条件的的话,那就会出现一组错误,因为A1算是一个交错级数当可能会出现0的情况。所以最好加个特判标志位。其他的就没什么了。

顺便巩固了一下memset的用法(可惜只能将非字符数组全部初始化为0或者-1,至少我现在只会这样的);

  因为题目比较简单,所以直接贴代码了

C:

 1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main()
6 {
7 int times;
8 int Index = 0, _3times = 0, isRemainde1 = 0;
9 int A[5] = {0};
10 int temp = {0};
11 int flag = 0;
12 memset(A, -1, sizeof(A));
13 scanf("%d", &times);
14
15 while (times--)
16 {
17 scanf("%d", &temp);
18 switch (temp % 5)
19 {
20 case 0:
21 if (temp % 2 == 0)
22 {
23 A[0] += temp;
24 }
25 break;
26 case 1:
27 isRemainde1 = 1;
28 if (0 == flag)
29 {
30 A[1] += temp;
31 }
32 else
33 {
34
35 A[1] -= temp;
36 }
37 flag = !flag;
38 break;
39 case 2:
40 A[2]++;
41 break;
42 case 3:
43 A[3] += temp;
44 _3times++;
45 break;
46 case 4:
47 if (A[4] < temp)
48 {
49 A[4] = temp;
50 }
51 break;
52 }
53 }
54
55 for (int i = 0; i < 4; i++)
56 {
57 if (-1 == A[i])
58 {
59 if (1 == isRemainde1 && 1 == i)
60 {
61 A[i]++;
62 }
63 continue;
64 }
65 A[i]++;
66 }
67
68 for (int i = 0; i < 5; i++)
69 {
70 3 == i ? (0 == _3times ? printf(" N") : printf(" %.1lf", A[i] * 1.0 / _3times)) : (0 == i ? (-1 == A[i] ? printf("N") : printf("%d", A[i])) : (-1 == A[i] ? printf(" N") : printf(" %d", A[i])));
71 }
72 return 0;
73 }

C++:

 1 #include <iostream>
2 #include <vector>
3 #include <iomanip>
4
5 int main(void)
6 {
7 using std::cout;
8 bool isRemainder1 = false;
9 int TestNumber, sign = 1, isRemainder3 = 0;
10 std::cin >> TestNumber;
11 std::vector<int> Remainder(5, -1);
12
13 while (TestNumber--)
14 {
15 int temp;
16 std::cin >> temp;
17
18 switch (temp % 5)
19 {
20 case 0:
21 if (0 == temp % 2)
22 {
23 Remainder[0] += temp;
24 }
25 break;
26 case 1:
27 isRemainder1 = true;
28 if (1 == sign)
29 {
30 Remainder[1] += temp;
31 }
32 else
33 {
34 Remainder[1] -= temp;
35 }
36 sign = !sign;
37 break;
38 case 2:
39 Remainder[2]++;
40 break;
41 case 3:
42 Remainder[3] += temp;
43 isRemainder3++;
44 // /cout << temp << " " << isRemainder3 << " " << Remainder[3] << std::endl;
45 break;
46 case 4:
47 if (Remainder[4] < temp)
48 {
49 Remainder[4] = temp;
50 }
51 break;
52 }
53 }
54
55 for (int i = 0; i < Remainder.size() - 1; i++)
56 {
57 if (-1 == Remainder[i])
58 {
59 if (true == isRemainder1 && 1 == i)
60 {
61 Remainder[i]++;
62 }
63 continue;
64 }
65 Remainder[i]++;
66 }
67
68 for (int i = 0; i < Remainder.size(); i++)
69 {
70 if (-1 == Remainder[i])
71 {
72 cout << "N";
73 }
74 else
75 {
76 if (3 == i)
77 {
78 cout << std::setiosflags(std::ios::fixed) << std::setprecision(1) << (Remainder[3] * 0.1) / (isRemainder3 * 0.1);
79 }
80 else
81 {
82 cout << Remainder[i];
83 }
84 }
85
86 if (i != Remainder.size() - 1)
87 {
88 cout << " ";
89 continue;
90 }
91 cout << std::endl;
92 }
93
94 return 0;
95 }

C的输出比较诡异,脑子一抽写的,有兴趣可以看一看

  PAT不易,诸君共勉!

P1012 数字分类的更多相关文章

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

    1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...

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

    1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...

  3. [C++]PAT乙级1012.数字分类 (20/20)

    /* 1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和, ...

  4. 牛客网 PAT 算法历年真题 1002 :数字分类 (20)

    1002 :数字分类 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定一系列正整数,请按要求对数字 ...

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

    1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...

  6. PAT 1012 数字分类 (20)(代码+测试点)

    1012 数字分类 (20)(20 分) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求 ...

  7. 【PAT】1012. 数字分类 (20)

    1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算 ...

  8. 【算法笔记】B1012 数字分类

    1012 数字分类 (20 分) 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A​1​​ = 能被 5 整除的数字中所有偶数的和: A​2​​ = 将被 5 除后余 1 的数字 ...

  9. PAT 乙级 1012.数字分类 C++/Java

    题目来源 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A​1​​ = 能被 5 整除的数字中所有偶数的和: A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和, ...

随机推荐

  1. [ERROR] error: error while loading <root>, error in opening zip file error: scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler mirror not found.

    在家编译一个Apache的开源项目,在编译时遇到错误如下: error: error while loading <root>, error in opening zip file [ER ...

  2. ZB本地设置

    (1)web.config <!--本地服务器--> <add name="connectionString" connectionString="mG ...

  3. springcloud gateway 项目打包部署运行

    新建一个springboot项目然后做了一个小demo跳转到baidu pom <?xml version="1.0" encoding="UTF-8"? ...

  4. jq的链式调用.end();

    先上code <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  5. Codeforces #536 A..D 题解

    foreword ummm... 开始前几个小时被朋友拉来打了这一场,总体海星,题目体验极佳,很符合口味,稍微有点点简单了不知道是不是因为是 New Year Round,很快就打到了 D,但是题目阅 ...

  6. MongoDB安装+基础操作

    MongoDB 一. 安装 这里展示使用docker安装mongoDB 拉取最新MongoDB镜像 docker pull mongo 运行容器 docker run -itd --name mong ...

  7. CodeForces - 869A The Artful Expedient

    题意:有两个序列X和Y,各含n个数,这2n个数互不相同,若满足xi^yj的结果在序列X内或序列Y内的(xi,yj)对数为偶数,则输出"Karen",否则输出"Koyomi ...

  8. linux中df和du查看磁盘大小不一致解决方法

    挂了一块50G到/data目录下#  df -h Filesystem Size Used Avail Use% Mounted on /dev/xvdb1 50G 46G 1.2G 98% /dat ...

  9. VUE - 路由跳转时设置动画效果

    /* 为对应的路由跳转时设置动画效果 */   <transition name="fade">         <router-view />     & ...

  10. 034、Java中自增之++在前面的写法

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...