1012 数字分类 (20)(20 分)

发表在专栏“PAT乙级题目详解”,并在持续更新中。

https://blog.csdn.net/column/details/23947.html

给定一系列正整数,请按要求对数字进行分类,并输出以下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

分析:

这道题需要注意的是:A2。当“A2的结果是0” 的情况下,可能是没有符合条件的数据,也可能是有符合条件的数据,加加减减后的结果为0.应该分别的讨论。

// B12.cpp : Defines the entry point for the console application.
//


#include <iostream>
using namespace std;
int main()
{
	int num;
	cin >> num;
	int a[1001];
	int a1 = 0;
	int a2 = 0;
	int t = 0;//记录该用正号还是负号
	int x = 0;// 记录 如果a2 == 0,是由于正负相消得零还是原来就是0 
	int a3 = 0;
	float a4 = 0;
	float sum = 0;//记录被5除后余3的数字的和
	float m = 0;//记录被5除后余3的数字的个数
	int a5 = 0;
	for (int i = 0; i < num; i++)
	{
		cin >> a[i];
	}
	//计算a1
	for (int i = 0; i < num; i++)
	{
		if (a[i] % 10 == 0)
		{
			a1 = a1 + a[i];
		}
	}
	if (a1 > 0)
	{
		cout << a1 << " ";
	}
	else if (a1 == 0)
	{
		cout << "N" << " ";
	}
	//计算a2
	for (int i = 0; i < num; i++)
	{
		if (a[i] % 5 == 1 && t == 0)
		{
			a2 = a2 + a[i];
			t = 1;
			x = 1;
		}
		else if (a[i] % 5 == 1 && t == 1)
		{
			a2 = a2 - a[i];
			t = 0;
			x = 1;
		}
	}
	if (a2 != 0 )
	{
		cout << a2 << " ";
	}
	else if (a2 == 0 && x == 1)
	{
		cout << "0" << " ";
	}
	else if (a2 == 0 && x == 0)
	{
		cout << "N" << " ";
	}
	//计算a3
	for (int i = 0; i < num; i++)
	{
		if (a[i] % 5 == 2)
		{
			a3++;
		}
	}
	if (a3 != 0)
	{
		cout << a3 << " ";
	}
	else if (a3 == 0)
	{
		cout << "N" << " ";
	}
	//计算a4
	for (int i = 0; i < num; i++)
	{
		if (a[i] % 5 == 3)
		{
			sum = sum + a[i];
			m = m + 1;
		}
	}
	if (sum != 0)
	{
		a4 = sum / m;
		cout.flags(ios::fixed);
		cout.precision(1); //设置输出精度, 
		cout << a4 << " ";
	}
	else if (sum == 0)
	{
		cout << "N" << " ";
	}
	//计算a5
	for (int i = 0; i < num; i++)
	{
		if (a[i] % 5 == 4 && a[i] > a5)
		{
			a5 = a[i];
		}
	}
	if (a5 != 0)
	{
		cout << a5 << endl;
	}
	else if (a5 == 0)
	{
		cout << "N" << endl;
	}
	system("pause");
	return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值