Classification numérique PAT Grade B 1012 (20 points)

contenu du sujet

Étant donné une série d'entiers positifs, triez les nombres selon vos besoins et produisez les 5 nombres suivants :

  • A1 = somme de tous les nombres pairs divisible par 5 ;
  • A2​ = Entrelacer la somme des nombres avec 1 restant après division par 5 dans l'ordre donné, c'est-à-dire calculer n1​−n2​+n3​−n4​… ;
  • A3​ = le nombre de chiffres avec 2 restants après division par 5 ;
  • A4​ = la moyenne des chiffres avec le reste 3 après division par 5, avec une précision à 1 décimale près ;
  • A5 = le plus grand nombre de nombres qui ont un reste de 4 lorsqu'ils sont divisés par 5.

Format d'entrée :

Chaque entrée contient 1 cas de test. Chaque cas de test reçoit un entier positif N jusqu'à 1000, suivi de N entiers positifs jusqu'à 1000 à classer. Les nombres sont séparés par des espaces.

Format de sortie:

Pour les N entiers positifs donnés, calculez A1​~A5​ comme requis par la question et affichez-les séquentiellement sur une seule ligne. Les nombres sont séparés par des espaces, mais il ne doit y avoir aucun espace supplémentaire à la fin de la ligne.

Si l'un des types de nombres n'existe pas, il sera sorti dans la position correspondante  N.

Échantillon d'entrée 1 :

13 1 2 3 4 5 6 7 8 9 10 20 16 18

pas de ligne blanche à la fin

Exemple de sortie 1 :

30 11 2 9.7 9

pas de ligne blanche à la fin

Échantillon d'entrée 2 :

8 1 2 4 5 6 7 9 16

pas de ligne blanche à la fin

Exemple de sortie 2 :

N 11 2 N 9

pas de ligne blanche à la fin

Idées de résolution de problèmes

La plage de données de N donnée dans le titre est de 1000, nous pouvons donc utiliser un tableau supérieur à 1000. Cependant, afin d'augmenter la difficulté, j'ai choisi une autre méthode d'implémentation, qui consiste à utiliser malloc pour créer un tableau dynamique pour y parvenir . Concevoir 5 fonctions pour réduire le couplage entre les codes. Ces 5 fonctions correspondent respectivement aux 5 exigences du titre. Pour plus de détails, voir le code

Code détaillé

#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;
int is_a[5] = {0};
int N;
int a1(int a[]){
    int sum = 0,count = 0;
    for(int i = 0;i<N;i++){
        if(a[i]%5==0&&a[i]%2==0) {
            sum+=a[i];
        count++;
        }
    }
    if(count == 0) is_a[0] = 1;
    return sum;
}
int a2(int a[]){
    int sum = 0,p = 1,count = 0;
    for(int i = 0;i<N;i++){
        if(a[i]%5==1) {
            sum+=a[i]*p;
            p = -p;
            count++;
    }
    }
        if(count == 0) is_a[1] = 1;
        return sum;

}
int a3(int a[]){
    int count = 0;
    for(int i = 0;i<N;i++){
        if(a[i]%5==2) {
            count++;
    }
    }
    if(count == 0) is_a[2] = 1;
    return count;
    
}
float a4(int a[]){
    float sum = 0,count = 0;
    for(int i = 0;i<N;i++){
        if(a[i]%5==3) {
            sum+=a[i];
            count++;
    }
    }
     if(count == 0) is_a[3] = 1;
    return sum/count;
    
}
int a5(int a[]){
    int max = 0,count = 0;
     for(int i = 0;i<N;i++){
        if(a[i]%5==4) {
            if(a[i]>max) max = a[i];
            count++;
    }
    }
    if(count == 0) is_a[4] = 1;
    return max;
}
int main(){
    int n,*a;
    cin>>n;
    N = n;
    a = (int *)malloc(n*sizeof(int));
    for(int i = 0;i<n;i++){
        cin>>a[i];
    }
    a1(a);a2(a);a3(a);a4(a);a5(a);
        if(is_a[0]==1) cout<<"N ";
        else cout<<a1(a)<<" ";
    if(is_a[1]==1) cout<<"N ";
        else cout<<a2(a)<<" ";
    if(is_a[2]==1) cout<<"N ";
        else cout<<a3(a)<<" ";
    if(is_a[3]==1) cout<<"N ";
        else printf("%.1f ",a4(a));
    if(is_a[4]==1) cout<<"N";
        else cout<<a5(a);
    
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45660485/article/details/119286773
conseillé
Classement