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 的数字按给出顺序进行交错求和, ...
随机推荐
- 一、什么是Velocity及简单示例
1.velocity简介: velocity是一个java模板引擎技术,任何人可以使用这种简单而又强有力的模板语言去获取java对象. 在使用Velocity进行web开发时,web开发人员和j ...
- 解题报告:luogu P5536 【XR-3】核心城市
题目链接:P5536 [XR-3]核心城市 这题是某次月赛题. 这题我完全是看标签猜的. 优先选择直径中点即可,这里重要的是互通,很容易想到用堆维护可选的,预处理直径和距叶节点距离即可(最近),实质上 ...
- UVALive 3231 网络流
题目要求给m个任务分配给n个机器,但最后任务量最多的那个机器的任务量尽量少,利用最大流,在最后的汇点那里设置关卡,二分结果,把机器到最终汇点的容量设置为该值,这样就达到题目条件,这样跑最大流 还能把m ...
- NO29 用户提权sudo配置文件详解实践--志行为审计
用户提权sudo配置文件详解实践: 放到visudo里: 验证权限:
- STM32学习笔记:创建工程模板
STM32作为一类高级单片机,在应用中不容小觑. 所以本人从2018年1月1日开始对于STM32系列单片机的学习. 本人所持的型号为:STM32F429ZI-DISCOVERY,M4内核,封装类型为: ...
- selenium 启动、窗口、获取标题
1. from selenium import webdriver #启动chrom浏览器,没写executable_path,这是因为配置环境时,已经将chromdriver放到python安装文件 ...
- 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程重要
前言 SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不知道大家有没有留意,在我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教 ...
- Redis原理详解
Redis原理详解 数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redi ...
- 基于LAMP实现后台活动发布和前端扫码签到系统
目的 无论是公司.学校和社会团体,都会举办各式各样的活动,比如运动会.部门会议.项目会议.野炊.团建等.作为团队管理者来讲,当然希望能够把这类活动转移到线上形成完整的系统,类似于电子流的形式.本文以学 ...
- python基础数据类型--元组(tuple)
python基础数据类型--元组(tuple) 一.元组的定义和特性 定义:与列表相似,只不过就是将[ ] 改成 ( ) 特性:1.可以存放多个值 2.不可变 3.按照从左到右的顺序定义元组元素,下标 ...