转跳点:

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

给定一系列正整数,请按要求对数字进行分类,并输出以下 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. Keras入门——(6)长短期记忆网络LSTM(三)

    参考: https://blog.csdn.net/u012735708/article/details/82769711 https://zybuluo.com/hanbingtao/note/58 ...

  2. kafka-console-consumer接收不到flume推送过来的消息

    原因和解决方法:需要先启动kafka,再启动flume,两者启动有先后顺序.

  3. 第1节 storm编程:3、storm的架构模型的介绍

    nimbus:主节点,接收客户端提交的任务,并且分配任务,新的版本当中nimbus已经可以有多个了 zookeeper集群:storm依靠zk来保存一些节点信息,nimbus将分配的任务信息都写入到z ...

  4. 一、java基础-数据类型_数据类型转化_字符编码_转义字符

    1.Java  支持的8种基本数据类型: java的四种整数数据类型:byte 1    short 2     int4     long8   byte     8位带符号整数 -128到127之 ...

  5. 5.7 Nginx 其他模块

  6. 记一次海洋cms任意代码执行漏洞拿shell(url一句话)

    实验环境:海洋CMS6.54(后续版本已该洞已补) 1.后台登录尝试 这个站点是个测试站,站里没什么数据. 进入admin.php,是带验证码的后台登录系统,没有验证码的可以用bp爆破.有验证码的也有 ...

  7. python中logging的使用

    什么是日志: 日志是一种可以追踪某些软件运行时所发生事件的方法 软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情 一个事件可以用一个可包含可选变量数据的消息来描述 此外,事件也 ...

  8. SCHema学习

    <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http:/ ...

  9. sftp 多用户安装与配置

    sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH 的一部分,由于这种传输方式使用了加密/解 ...

  10. db.mybatis.config

    config1: <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryB ...