B1012刷题

题目

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

  • A1A_1A1 = 能被 5 整除的数字中所有偶数的和;
  • A2A_2A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯n_1-n_2+n_3-n_4\cdotsn1n2+n3n4
  • A3A_3A3 = 被 5 除后余 2 的数字的个数;
  • A4A_4A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
  • A5A_5A5 = 被 5 除后余 4 的数字中最大数字。

输入格式:

每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 NNN,随后给出 NNN 个不超过 1000 的待分类的正整数。数字间以空格分隔。

输出格式:

对给定的 NNN 个正整数,按题目要求计算 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若其中某一类数字不存在,则在相应位置输出 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:

思路:

根据输入数%5后的数,进行4种操作并输出。
测试点7一直错误。反复测试后,发现应该是A4的精度设置的问题。
原输出格式:

		cout.precision(2);
		cout<<d4<<' ';

修改后输出格式:

		cout<<fixed<<setprecision(1)<<d4<<" ";

注:

控制精度:setprecision(n),输出n位。
而加了fixed意味着是固定点方式显示,所以这里的精度指输出小数点后n位。
第一次错误在于:未固定小数点,只固定了输出位数是两位。所以当输出为两位数时,不再输出小数点。

AC代码:

#include <bits/stdc++.h>
using namespace std;

int main(){
	int n,a[1001];
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	bool flag[5]={0};
	int factor=1;
	int sum1=0,num1=0,sum2=0,num2=0,num3=0,max5=0;
	double sum4=0.0,num4=0.0;
	for(int i=0;i<n;i++){
		switch(a[i]%5){
			case 0:                        //A1
				if(a[i]%10==0) {
					sum1+=a[i];
					flag[0]=1;
				}
				break; 
			case 1:                         //A2
				sum2+=factor*a[i];
				factor=-factor;
				flag[1]=1;
				break;
			case 2:                            //A3
				num3++; 
				flag[2]=1;
				break;
			case 3:                              //A4
				sum4+=a[i];
				num4++;
				flag[3]=1;
				break;
			case 4:                              //A5
				if(a[i]>max5) {
					max5=a[i];
				}
				flag[4]=1;
				break;
		}
	}

	float d4=sum4/num4;           //d4记录A4的平均数 
	
	if(flag[0]==0) cout<<'N'<<' ';
	else cout<<sum1<<' ';
	
	if(flag[1]==0) cout<<'N'<<' ';
	else cout<<sum2<<' ';
	
	if(flag[2]==0) cout<<'N'<<' ';
	else cout<<num3<<' '; 
	
	if(flag[3]==0) cout<<'N'<<' ';
	else {
		cout<<fixed<<setprecision(1)<<d4<<" ";

	}
	
	if(flag[4]==0) cout<<'N';
	else cout<<max5; 
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值