1012 数字分类 (20分)
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
输入格式:
每个输入包含 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
分析:
用vector来储存输入的数值,再遍历根据情况来分别给a1,a2,a3,a4,a5赋值。
利用操纵流算子来进行格式化输出。
操纵流算子的相关知识点和函数http://c.biancheng.net/view/275.html
代码:
#include<iostream>
#include<iomanip>
#include<vector>
using namespace std;
int main()
{
vector<int> n;
int N;
int t;
int a1, a2, a3, a4, a5;
int flag = 1; //a2判断正负号
int size = 0; //记录a4的个数
int number[5] = {0}; //记录各个部分数字的个数
a1 = a2 = a3 = a4 = a5 = 0;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> t;
n.push_back(t);
}
for (int i = 0; i < (int)n.size(); i++) {
switch (n[i] % 5) {
case 0:if (n[i] % 2 == 0) { a1 += n[i]; ++number[0]; } break; //既要整除也要是偶数
case 1:if (flag) { a2 += n[i]; flag = 0; }
else { a2 -= n[i]; flag = 1; }++number[1]; break;
case 2:++a3; ++number[2]; break;
case 3:a4 += n[i]; size++; ++number[3]; break;
case 4:if (n[i] > a5)a5 = n[i]; ++number[4];
}
}
if (number[0]) { cout << a1 << ' '; } //格式化输出,偷了下懒写的有些多,可以简化
else { cout << "N "; }
if (number[1]) { cout << a2 << ' '; }
else { cout << "N "; }
if (number[2]) { cout << a3 << ' '; }
else { cout << "N "; }
if (number[3]) { cout << fixed << setprecision(1) << (double)a4 / size << ' '; }//利用操纵流算子控制格式
else { cout << "N "; }
if (number[4]) { cout << a5; }
else { cout << "N"; }
return 0;
}