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 的数字按给出顺序进行交错求和, ...
随机推荐
- (3)LoraWAN:链路控制、SF BW CR
三.Introduction on LoRaWAN options 本文件描述了一种用于可为移动的或固定在一个固定位置的电池供电的终端设备而优化的LoRaWAN™网络协议.LORA™是一个由Semte ...
- 深度学习Tensorflow框架的安装
选择下载安装Anaconda3.4.2.0-python3.5版本安装(3.6版本不适合后面opencv-python的安装): 打开Anaconda Prompt命令窗口编辑界面(黑窗口),输入py ...
- WinCC V7.5安装过程截图
- 吴裕雄--天生自然JAVAIO操作学习笔记:字符编码与对象序列化
public class CharSetDemo01{ public static void main(String args[]){ System.out.println("系统默认编码: ...
- java 十大经典排序算法
十大排序算法可以说是每个程序员都必须得掌握的了,花了一天的时间把代码实现且整理了一下,为了方便大家学习,我把它整理成一篇文章,每种算法会有简单的算法思想描述,为了方便大家理解,我还找来了动图演示:这还 ...
- OS、浏览器排名:Win10狂飙、Chrome逆天
根据 Netmarketshare公布的最新数据,2019年7月,Windows 10系统市场份额获得显著增长,市场份额创下新高:Windows 7则进一步衰退,份额下滑高达3.6%,这也是其历史上最 ...
- springboot2.1以javabean整合rabbitmq及自动注入rabbitmqTemplate为空问题
springboot集成rabbitmq之前也写过,这次再来个总结,总体来讲比较简单 主要就是配置属性文件,将属性以javabean的形式注入,配置工厂,对象等原来以xml<bean>形式 ...
- window 命令行telnet 不能用问题
如图 解决办法 打开window控制面板,启用或关闭window功能,勾选telnet选项.
- MySQL 批量更新、删除数据shell脚本
#!/bin/bash. ~/.bash_profilelog=/tmp/update_log_1_$(date +%F).logvstart=1step=100vstop=$((${vstart}+ ...
- string.xml中的空格
<string name="userName"> 用 户 名</string>