见题知意,但是还是有几点注意的地方
思路
很容易想到开辟一个数组, 用数组下标表示题中五类数字,然后对给出的每个数字分类处理就好;
注意
A1:给出的都是正整数,故此类无需做特别处理;
A2:因为是交错求和,可能最后和为0,但不代表该类数字没有;
A3:简单情况,即题意;
A4:先求和,统计个数,最后计算平均数,打印再精确1位小数;
A5:简单情况,即题意;
代码如下,提交使用g++
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, num[1000], count1=0, count3=0;//count1和count3分别对模5与1和3做统计
double a[5]; //五类数字个数
scanf("%d", &n);
for(int i=0; i<n; i++)
{
scanf("%d", &num[i]);
}
memset(a, 0, sizeof(a)); //数组a置0
bool flag = true; //为A2交错标记
for(int i=0; i<n; i++)
{
switch(num[i]%5)
{
case 0:
if(!(num[i]&1)) //通过位运算判断奇偶
a[0] += num[i];
break;
case 1:
if(flag)
{
a[1] += num[i];
flag = false;
}
else
{
a[1] -= num[i];
flag = true;
}
count1++; //count1++说明是有此类数字的;
break;
case 2:
a[2]++;
break;
case 3:
a[3] += num[i];
count3++; //count3++说明是有此类数字的,记录此类数字个数
break;
case 4:
if(a[4] < num[i])
a[4] = num[i];
break;
}
}
if(count3!=0)
a[3] /= count3; //A4求平均数
for(int i=0; i<4; i++) //控制输出
{
if(i==1)
{
if(count1==0) //没有A2类数字输出N
printf("N ");
else //有则输出结果,其结果可能为0
printf("%.0lf ", a[i]);
}
else if(i==3)
{
if(a[i]>0)
printf("%.1lf ", a[i]);
else
printf("N ");
}
else
{
if(a[i]>0)
printf("%.0lf ", a[i]);
else
printf("N ");
}
}
if(a[4]>0)
printf("%.0lf", a[4]);
else
printf("N");
return 0;
}