PAT1012乙级部分测试点失败的原因分析

PAT1012乙级部分测试点失败的原因分析

PAT1012题目

链接:https://pintia.cn/problemsets/994805260223102976/problems/994805320306507776
在这里插入图片描述

题解

题目中提到的A1~A5中,A4肯定需要加计数器。

除此之外,A2可能为0或小于0,所以在判断A2这类数字不存在的时候,A2也必须加一个计数器(或判定器)来辅助输出判定。(这是一个测试点)

其他的A1、A3、A4、A5由于不可能为0,所以设置为初始0,在最后输出时只需要判别是不是0就可以判断输出N或输出相应的数字。

实现代码(C++)

#include"iostream"
#include"iomanip"
using namespace std;
bool ifqufan = true;
int qufan(int n) {//取反函数
	ifqufan = !ifqufan;
	if (ifqufan) return -n;//需要取反
	else return n;//不需要取反
}
int main()
{
	int T;
	cin >> T;
	int n;
	int A[5] = { 0 };
	int A1num = 0, A3num = 0;//分别为A[1]和A[3]的计数器
	while (T--)
	{
		cin >> n;
		switch (n % 5) {
		case 0:A[0] += (n % 2 == 0 ? n : 0); break;//能被 5 整除的数字中所有偶数的和
		case 1:A[1] += qufan(n); A1num++; break;//将被 5 除后余 1 的数字按给出顺序进行交错求和
		case 2:A[2]++; break;//被 5 除后余 2 的数字的个数
		case 3:A[3] += n; A3num++; break;//被 5 除后余 3 的数字的平均数,精确到小数点后 1 位
		case 4:A[4] = (n > A[4] ? n : A[4]); break;//被 5 除后余 4 的数字中最大数字。
		}
	}

	if (A[0] != 0) cout << A[0] << ' '; else cout << "N ";
	if (A1num != 0) cout << A[1] << ' '; else cout << "N ";
	if (A[2] != 0) cout << A[2] << ' '; else cout << "N ";
	if (A3num != 0) cout << fixed << setprecision(1) << 1.0*A[3] / A3num << ' '; //用printf("%.1f ", 1.0*A[3] / A3num);效果一样
	else cout << "N ";
	if (A[4] != 0) cout << A[4]; else cout << "N";

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值