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);
}