#include <stdio.h>
#define MAX_N 1000 /* 最多输入1000个数 */
#define NON_EXIST 32766 /* A1-A5 不存在*/
#define ADD 1 /* A2要交错加减 */
#define MINUS 0 /* A2要交错加减 */
/* 将lim个数读入数组read[]中,并将除以5的余数存到re中 */
void read_re_N(int read[], int re[], int lim){
int i;
for(i = 0; i < lim; ++i){
scanf("%d", &read[i]);
re[i] = (read[i] % 5);
}
}
void calcu_A1_A5(int s[], int re[], int lim){
int i, A1, A2, A3, A5;
int A2_flag = ADD;
float A4, A4_sum = 0; /* 求平均数的总和 */
int A4_count = 0; /* 求平均数:余数为3的数有几个 */
A1 = A2 = A3 = A4 = A5 = NON_EXIST;
for(i = 0; i < lim; ++i){
/* 计算A1 = 能被5整除的数字中所有偶数的和 ************************************/
if(re[i] == 0 && (s[i] % 2) == 0){ /* 余数为零, 且为偶数 */
if(A1 == NON_EXIST)
A1 = s[i];
else
A1 += s[i];
/* 计算A2 = 将被5除后余1 的数字按给出的顺序交错求和,即n1-n2+n3-n4...*********/
}else if(re[i] == 1){ /* 余数为1 */
if(A2 == NON_EXIST){
A2 = s[i];
A2_flag = MINUS; /* 下一个余数为一的数要减 */
}else{
if(A2_flag == MINUS){
A2 -= s[i];
A2_flag = ADD;
}else{
A2 += s[i];
A2_flag = MINUS;
}
}
/* 计算A3 = 被5除后余2的数字的个数 ******************************************/
}else if(re[i] == 2){ /* 余数为2 */
if(A3 == NON_EXIST)
A3 = 1;
else
++A3;
/* 计算A4 = 被5除后余3的数字的平均数,精确到小数后1位 ***********************/
}else if(re[i] == 3){ /* 余数为3 */
A4_sum += s[i]; /* A4 = A4_sum / A4_count */
++A4_count;
/* 计算A5 = 被5除余4的数字中最大的数字 **************************************/
}else if(re[i] == 4){ /* 余数为4 */
if(A5 == NON_EXIST)
A5 = s[i];
else
if(s[i] > A5)
A5 = s[i];
}
}
/* 输出A1-A5 *****************************************************************/
if(A4_sum != 0) /* 先计算一下A4 */
A4 = A4_sum / A4_count;
if(A1 != NON_EXIST) /* A1存在 */
printf("%d ", A1);
else /* A2不存在 */
printf("N ");
if(A2 != NON_EXIST) /* A2存在 */
printf("%d ", A2);
else /* A2不存在 */
printf("N ");
if(A3 != NON_EXIST) /* A3存在 */
printf("%d ", A3);
else /* A3不存在 */
printf("N ");
if(A4 != NON_EXIST) /* A4存在 */
printf("%.1f ", A4);
else /* A4不存在 */
printf("N ");
if(A5 != NON_EXIST) /* A5存在 */
printf("%d", A5);
else /* A5不存在 */
printf("N");
}
int main(){
int array[MAX_N] = {0}; /* 记录读入的数 */
int re[MAX_N] = {-1}; /* 记录读入的数除以5的余数 remainder */
int N; /* 要读入多少个数 */
scanf("%d", &N);
read_re_N(array, re, N); /* 将这N个数,读入数组array, 计算余数re */
calcu_A1_A5(array, re, N); /* 计算A1-A5 并输出 */
}
【PAT B1012】数字分类 (C语言)
最新推荐文章于 2023-05-29 22:52:20 发布