P1012 数字分类
转跳点:
这道题差点把我写哭,主要还是自己考虑的不够全面,先看一下题,我再说一下坑。
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
这道题本身很简单,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", ×);
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 数字分类的更多相关文章
- PAT乙级 1012. 数字分类 (20)
1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...
- PAT-乙级-1012. 数字分类 (20)
1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...
- [C++]PAT乙级1012.数字分类 (20/20)
/* 1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和, ...
- 牛客网 PAT 算法历年真题 1002 :数字分类 (20)
1002 :数字分类 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定一系列正整数,请按要求对数字 ...
- PAT 乙级 1012 数字分类 (20) C++版
1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...
- PAT 1012 数字分类 (20)(代码+测试点)
1012 数字分类 (20)(20 分) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求 ...
- 【PAT】1012. 数字分类 (20)
1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算 ...
- 【算法笔记】B1012 数字分类
1012 数字分类 (20 分) 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和: A2 = 将被 5 除后余 1 的数字 ...
- PAT 乙级 1012.数字分类 C++/Java
题目来源 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和: A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和, ...
随机推荐
- 六、java基础-单例模式_继承_覆盖_多态
1.单例模式: 1)提出原因 是由gof 也就是四人组提出来的.为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销.因为外面程序可以通过new的方法直接调用类里面的构造方法 ...
- 小程序的tabar顶部和底部导航的区别
最近有人说小程序的底部tabar放在顶部会出现问题,那么先看看如何放在顶部吧:图片效果: 这里呢,在官方文档是有说明,tabbar 的属性设置里面有个position属性,position只支持bot ...
- 【随缘更(gu)】牛客D4简要思路(没有题解)
T1 当然不能枚举每个区间,于是我们考虑算贡献. 对于每个位置i,我们计算其作为区间内第一个出现ai的位置的区间总数,则有ans=sigma( i - last[i] ) * ( n - i + 1 ...
- WPBakery Page Builder页面生成器6.0 汉化版
WPBakery Page Builder 是一个可视化编辑器插件 ,相较于WP自带的编辑器使用起来更加方便,同时功能更 加强大,完全的可视化操作,使用比较简单,国外有多款主题需要使用插件. WPBa ...
- [STL]string类型的getline函数
3.cin.getline() 实际是cin.getline(接收字符串到m,接收个数n,结束字符).接收一个字符串,可以接收空格等,最后一个字符为‘\0’.结束符可以通过设置第三个参数自己设置,默认 ...
- Mozilla Firefox 将获得包含 Tor 模式的扩展组件
据外媒报道,Firefox 浏览器可能很快就会收到一个 Tor 模式的附加组件,它将通过连接 Tor 网络显著增强隐私功能.虽然 Mozilla 和 Tor 团队的最终目标是在浏览器上实现完整功能的 ...
- 免费的 Linux 分区管理器使用介绍
下面的列表没有特定的排名顺序.大多数分区工具应该存在于 Linux 发行版的仓库中. GParted 这可能是 Linux 发行版中最流行的基于 GUI 的分区管理器.你可能已在某些发行版中预装它.如 ...
- 苹果vs中国竞争者:瘦死的骆驼比马大?
前不久,苹果调整2019年第一财季的营收指引,预计第一季度毛利率为38%,相关收入大约为55亿美元,全年总体营收约为840亿美元,运营开支约为87亿美元.针对2019年的运营状况,库克亲自给投资者写了 ...
- db.mysql.主从同步实验
实验环境:windows10(1607).mysql5.7.16 (for windows zip) 主库(端口3306)配置文件: [mysqld] #数据库根目录 basedir = D:\my ...
- Metasploit学习笔记——Web应用渗透技术
1.命令注入实例分析 对定V公司网站博客系统扫描可以发现,它们安装了zingiri-web-shop这个含有命令注入漏洞的插件,到www.exploit-db.com搜索,可以看到2011.11.13 ...