相关说明:
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)
题目描述
给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:
A1 = 能被5整除的数字中所有偶数的和;
A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…;
A3 = 被5除后余2的数字的个数;
A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
A5 = 被5除后余4的数字中最大数字。
输入描述:
每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。
输出描述:
对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出“N”。
输入例子:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出例子:
30 11 2 9.7 9
思想:
先进行分类,然后根据分类进行相关操作。
直接上代码(C语言版):
#include <stdio.h>
//元素定义
struct ELEMENT
{
int data;
struct ELEMENT *next;
} ELEMENT;
struct TYPE{
int type;
struct ELEMENT *next;
}TYPE;
int main(void){
//输入
struct TYPE group[5] = {(0,NULL),(1,NULL),(2,NULL),(3,NULL),(4,NULL)};
int N;
scanf("%d",&N);
int numbers[N];
for(int i = 0;i < N;i++){
int temp;
scanf("%d",&temp);
numbers[i] =temp;
}
int zero = 0;
//分类
for(int i = 0;i < N;i++){
int t = numbers[i]%5;
if(t == 0){
zero++;
}
struct ELEMENT *p = (struct ELEMENT*)malloc(sizeof(struct ELEMENT));
p->data =numbers[i];
p->next = NULL;
struct ELEMENT *q = (struct ELEMENT*)malloc(sizeof(struct ELEMENT));
if(group[t].next == NULL){
group[t].next = p;
}else{
q = group[t].next;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
p = NULL;
q = NULL;
}
//输出
for(int i = 0;i < 5;i++){
struct ELEMENT *k = (struct ELEMENT*)malloc(sizeof(struct ELEMENT));
if(group[i].next == NULL){
if(i==4){
printf("N");
}else{
printf("N ");
}
continue;
}
k = group[i].next;
k->data =group[i].next->data;
int sum = 0;
int flag = 1;
int num = 0;
float res = 0.0;
int max;
switch (i) {
case 0:
{while (k != NULL){
if( ((k->data) % 2) == 0){
sum = sum + (k->data);
k = k->next;
}else{
k = k->next;
}
}
if(sum == 0){
printf("N ");
}else{
printf("%d ",sum);
}
k = NULL;
sum = 0;
}
break;
case 1:
{while (k != NULL) {
if(flag == 1){
sum = sum + k->data;
}else{
sum = sum - k->data;
}
flag = 0 - flag;
k = k->next;
}
if(sum == 0){
printf("N ");
}else{
printf("%d ",sum);
}
sum = 0;
k = NULL;}
break;
case 2:
{ while (k != NULL) {
num++;
k = k->next;
}
printf("%d ",num);
k = NULL;
num = 0;
break;
case 3:
while (k != NULL) {
sum = sum + (k->data);
k = k->next;
num++;
}
res =1.0*sum/num;
printf("%.1f ", res);
sum = 0;
k = NULL;}
break;
case 4:
{max = k->data;
while (k != NULL) {
if(k->data > max){
max =k->data;
}
k = k->next;
}
printf("%d", max);
k = NULL;}
break;
default:
k = NULL;
num = 0;
sum = 0;
break;
}
}
return 0;
}