PAT 数字分类(20)

题目链接:https://www.nowcoder.com/pat/6/problem/4078

做题思路:以次便遍历输入的数字,每个数字符合哪种情况就对应相应的运算法则。

学到的知识点:

  • 1、三目运算符的运算法则(判断的语句)?true:false 
  • 2、局部变量在第51行报错,当我将他们分开试的时候发现max错了,原因max在这里是局部变量,当循环结束时就把max抛弃了再想去获取时就不能够获取到,只需要将它定义在前面就可以。
  • 3、数交错相加只需要弄一个标志,将标志每一次变号就好
  • 4、%.1f 数字一代表小数点后保留几位有效数字 ( %.f 四舍五入)

本题存在的bug:

  • 样例13 代表一共有多少个数,并不是其中的一个数!这点初读题目非常纠结。
  • sum2交错后有可能为0,但是这样也能够通过,最好设置另一个变量判断出现的次数,没有出现就一定w;

别人的代码:在牛客上通过,但是PTA上面有点小问题(看着挺舒服的,想学习一下)

#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    int c1=0,c2=0,c3=0,c4Num=0,c5=0;
    float c4=0;
    int n,x,i=1;
    cin>>n;
    while(n--)
    {
        cin>>x;
        switch(x%5)
        {
            case 0:if(x%2==0) c1+=x; break;
            case 1:c2+=(i*x);i=-i;break;
            case 2:c3++;break;
            case 3:c4+=x;c4Num++;break;
            case 4:if(x>c5)c5=x;break;
        }
    }
    (c1>0)?(cout<<c1<<" "):(cout<<"N ");
    (c2!=0)?(cout<<c2<<" "):(cout<<"N ");
    (c3>0)?(cout<<c3<<" "):(cout<<"N ");
    (c4>0)?(cout<<fixed<<setprecision(1)<<c4/c4Num<<" "):(cout<<"N ");
    (c5>0)?(cout<<c5):(cout<<"N");
    return 0;
}

#include<stdio.h>
int main()
{	
	int T;
	scanf("%d",&T);
	int a[1010];
	for(int i=0;i<T;i++)
	{
		scanf("%d",&a[i]);
	}
	int sum1,sum2,sum3,sum4,count;
		sum1=sum2=sum3=sum4=count=0;
	float average;
	int max=a[0],flag=1;
	
	int A1,A2,A3,A4,A5;
		A1=A2=A3=A4=A5=0;
	for(int i=0;i<T ;i++)
	{
		if(a[i]%10==0)
		{
			sum1+=a[i];
			A1++;
		}
		
		else if(a[i]%5==1)
		{
			sum2=sum2+flag*a[i];
			flag=-flag;
			A2++;
		}
		
		else if(a[i]%5==2)
		{
			sum3++;
			A3++;
		}	
		
		else if(a[i]%5==3)
		{
			sum4+=a[i];
			count++;
			average=sum4*1.0/count;
			A4++;
		}
		
		else if(a[i]%5==4)
		{	
			if(a[i]>=max)
			{
				max=a[i];
			}
			A5++;
		}
	}	//printf("%d %d %d %.1f %d",sum1,sum2,sum3,average,max);
	(A1>0) ? printf("%d ",sum1):printf("N ");
	(A2>0) ? printf("%d ",sum2):printf("N ");
	(A3>0) ? printf("%d ",sum3):printf("N ");
	(A4>0) ? printf("%.1f ",average):printf("N ");
	(A5>0) ? printf("%d",max):printf("N");
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值