牛客网-PAT乙级(Basic Level)真题-数字分类 (20)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SoftpaseFar/article/details/89155645

相关说明:

时间限制 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;
    

}


猜你喜欢

转载自blog.csdn.net/SoftpaseFar/article/details/89155645