#第一次代码
#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 << " " ;