PAT Basic Level 1012 数字分类 解题思路及AC代码

1. 题目描述及在线测试位置

1.1 按题目要求进行数字分类
1.2 在线测试位置:PAT1012 数字分类

2. 具体实现

2.1 基本思路

1.按要求编写代码即可
2.对于输出要求 “若其中某一类数字不存在,则在相应位置输出 N”,这里的N是字符’N’

2.2 AC代码

#include <iostream>
using namespace std;

#define max 1000

void Func1(int a[], int N);
void Func2(int a[], int N);
void Func3(int a[], int N);
void Func4(int a[], int N);
void Func5(int a[], int N);

int main()
{
	int N;
	int a[max];

	//cin >> N;
	scanf("%d", &N);

	for (int i = 0; i < N; i++)
		scanf("%d", &a[i]);//cin >> a[i];

	Func1(a, N);
	Func2(a, N);
	Func3(a, N);
	Func4(a, N);
	Func5(a, N);

	return 0;
}

void Func5(int a[], int N) //被 5 除后余 4 的数字中最大数字
{
	int MaxNumber = 0;
	for (int i = 0; i < N; i++)
	{
		if (a[i] % 5 == 4)
			if (a[i] > MaxNumber)
				MaxNumber = a[i];
	}
	if (MaxNumber)
		printf(" %d", MaxNumber);
	else
		printf(" %s", "N");
}

void Func4(int a[], int N)//被 5 除后余 3 的数字的平均数,精确到小数点后 1 位
{
	float average = 0;
	int sum = 0, count = 0;
	for (int i = 0; i < N; i++)
	{
		if (a[i] % 5 == 3)
		{
			count++;
			sum += a[i];
		}
	}
	average = (float)sum / count;
	if(count)
		printf(" %.1f", average);
	else
		printf(" %s", "N");
}

void Func3(int a[], int N)// 被 5 除后余 2 的数字的个数
{
	int count = 0;
	for (int i = 0; i < N; i++)
	{
		if (a[i] % 5 == 2)
			count++;
	}

	if(count)
		printf(" %d", count);
	else
		printf(" %s", "N");
}

void Func2(int a[], int N)//将被 5 除后余 1 的数字按给出顺序进行交错求和,n1-n2+n3
{
	int sum = 0; bool flag = true; bool mark = false;
	for (int i = 0; i < N; i++)
	{
		if (a[i] % 5 == 1)
		{
			mark = true;

			if (flag)
			{
				sum += a[i];
				flag = false;
			}
			else
			{
				sum -= a[i];
				flag = true;
			}

		}			
	}
	if(mark)
		printf(" %d", sum);
	else
		printf(" %s", "N");
}

void Func1(int a[], int N) // 能被 5 整除的数字中所有偶数的和
{
	int sum = 0; 
	for (int i = 0; i < N; i++)
	{
		if (!(a[i] % 5) && !(a[i] % 2))
			sum += a[i];
	}
	if (sum)
		printf("%d", sum);
	else
		printf("%s", "N");
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值