1012 数字分类

#第一次代码
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int A1[1000]={0};
    int A2[1000]={0};
    int A3[1000]={0};
    float A4[1000]={0};
    int A5[1000]={0};
    int num, count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0;
    cin>>num;
    for(int i=0;i<num;i++){
        int a;
        cin>>a;
        if(a%5==0&&a%2==0){
            A1[count1]=a;
            count1++;
        }
        else if(a%5==1){
            A2[count2]=a;
            count2++;
        }
        else if(a%5==2){
            A3[count3]=a;
            count3++;
        }
        else if(a%5==3){
            A4[count4]=a;
            count4++;
        }
        else if(a%5==4){
            A5[count5]=a;
            count5++;
        }
    }
    int sum1 = 0, sum2 = 0, num3 = 0, sum4 = 0, max5 = 0;
    float avg4 = 0.0;
    for(int i=0;i<count1;i++){
        sum1+=A1[i];
    }
    for(int i=0;i<count2;i++){
        if(i%2==0){
            sum2+=A2[i];
        }
        else {
            sum2-=A2[i];
        }
    }
    num3=count3;

    for(int i=0;i<count4;i++){
        sum4+=A4[i];
    }
    if (count4 > 0) {
        avg4 = static_cast<float>(sum4) / count4;
    }
    for(int i=0;i<count5;i++){
        if(A5[i]>max5){
            max5=A5[i];
        }
        if(A5[i]==0){
            break;
        }
    }
    if(count1==0){
        cout<<"N"<< " ";
    }
    else {
        cout<< sum1 << " " ;
    }

    if(count2==0){
        cout<<"N"<< " ";
    }
    else {
        cout<< sum2 << " " ;
    }


    if(count3==0){
        cout<<"N"<< " ";
    }
    else {
        cout<< num3 << " " ;
    }


  

    if(count4==0.0){
        cout<<"N"<< " " ;
    }
    else {
        cout<< fixed << setprecision(1) << avg4 << " " ;

    
    }
    if(count5==0){
        cout<<"N";
    }
    else {
        cout<< max5;
    }

    return 0;
  
}
//如果不想用五个数组的话,可以只使用一个数组
//其实代码很精简,我只是将换行和循环都展开,看着比较多
#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    int num,index=0,count=0,a[1001]={0},A1=0,A2=0,A3=0,A5=0;   //定义各个变量
    float A4=0.0;
    cin>>num;
    for(int i=0;i<num;i++){
        cin>>a[i];
        
        if(a[i]%5==0&&a[i]%2==0){   //处理A1
            A1+=a[i];
        }
        if(a[i]%5==1){              //处理A2
            if(index%2==0)
                A2+=a[i];
            else
                A2-=a[i];
            index++;
        }
        if(a[i]%5==2){
            A3++;
        }
        if(a[i]%5==3){
            A4+=a[i];
            count++;
        }
        if(a[i]%5==4){
            if(a[i]>A5)
                A5=a[i];
        }  
    }
    if(count==0)        //避免计算平均值时候出现除0情况
        A4=0.0;
    else
        A4=A4/count;     //计算平均数

    
    if(A1==0)
        cout<<"N"<<" ";
    else
        cout<<A1<<" ";

    if(A2==0&&index==0)   //先加后减可能为0但是并不是不存在,所以index==0表示没有任何数据加入A2的运算
        cout<<"N"<<" ";
    else
        cout<<A2<<" ";

    if(A3==0)
        cout<<"N"<<" ";
    else
        cout<<A3<<" ";
        
    if(A4==0.0)
        cout<<"N"<<" ";
    else
        cout<<fixed<<setprecision(1)<<A4<<" ";
    
    if(A5==0)
        cout<<"N";
    else
        cout<<A5;

    return 0;



    
}

 

#精简版代码
#include <stdio.h>
#include <math.h>
int main() {
	int n, index = 0, cnt = 0, a[1001] = { 0 }, A1 = 0, A2 = 0, A3 = 0, A4 = 0, A5 = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
		if (a[i] % 10 == 0) A1 += a[i];
		if (a[i] % 5 == 1) A2 += a[i] * pow(-1, index++);	//轮流加减
		if (a[i] % 5 == 2) A3++;
		if (a[i] % 5 == 3 && ++cnt) A4 += a[i];
		if (a[i] % 5 == 4 && a[i] > A5) A5 = a[i];
	}
	A1 ? printf("%d ", A1) : printf("N ");
	index ? printf("%d ", A2) : printf("N ");	//测试点8中A2=0,但进行过加减,应该输出0而不是N
	A3 ? printf("%d ", A3) : printf("N ");
	A4 ? printf("%.1f ", A4 * 1.0 / cnt) : printf("N ");    //A4先转化为浮点数
	A5 ? printf("%d", A5) : printf("N");
	return 0;
}

        但是做完后我发现总是最后一个测试用例不通过,然后根据分析我才发现因为A2可能交叉和为0,所以应该输出0,而不是N;

        所以我将最后判断是不是N时将判断条件从:sum1==0,sum2==0,num3==0等改成count1==0,count2==0等,这样就可以通过全部测试用例了。

知识点:

保留几位小数c++实现:头文件#include <iomanip>   输出样式cout<< fixed << setprecision(1) << avg4 << " " ;

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值