Problème Étant donné un tableau a, nous devons trouver le produit minimum possible avec le sous-ensemble d'éléments présents dans le tableau. Le produit minimum peut être un seul élément aussi.
Exemple 1
Entrée
a[] = { -1, 1, -2, -2, 3 } Sortie
-12
Explication : ( -1 × 1 × -2 × -2 × 3 ).
Exemple 2
Entrée
a[] = { -1, 0 } Sortie
-1
Explication : { -1 }.
1. S'il y a un nombre pair de nombres négatifs et pas de zéros :
Le résultat est le produit de tous sauf le plus grand nombre négatif (le plus proche de zéro).
2. S'il y a un nombre impair de nombres négatifs et pas de zéros :
Le résultat est simplement le produit de tous.
3. S'il y a des zéros et des positifs, pas de négatifs :
Le résultat est 0.
4. Cas exceptionnel : quand il n'y a pas de nombre négatif et tous les autres éléments positifs :
Le résultat doit être le premier nombre minimum positif.#include <stdio.h>
#include <limits.h>
int minProduit(int a[], int n) {
if (n == 1)
return a[0];
int max_neg = INT_MIN; // Plus grand négatif (le plus proche de zéro)
int min_pos = INT_MAX; // Plus petit positif
int cpt_neg = 0; // Compteur de négatifs
int cpt_zero = 0; // Compteur de zéros
int prod = 1; // Produit des éléments non nuls
for (int i = 0; i < n; i++) {
// Ignorer si zéro
if (a[i] == 0) {
cpt_zero++;
continue;
}
// Compter et trouver le plus grand négatif
if (a[i] < 0) {
cpt_neg++;
if (a[i] > max_neg)
max_neg = a[i];
}
// Stocker le nombre positif minimum
if (a[i] > 0) {
if (a[i] < min_pos)
min_pos = a[i];
}
prod *= a[i];
}
// Cas 1 : tous zéros ou que des zéros et positifs
if (cpt_zero == n || (cpt_neg == 0 && cpt_zero > 0))
return 0;
// Cas 2 : tous positifs
if (cpt_neg == 0)
return min_pos;
// Cas 3 : nombre pair de négatifs
if (cpt_neg % 2 == 0 && cpt_neg != 0) {
// Exclure le plus grand négatif (le plus proche de zéro)
prod /= max_neg;
}
return prod;
}
int main() {
int a[] = {-1, 1, -2, -2, 3};
int n = sizeof(a) / sizeof(a[0]);
printf("Tableau : ");
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
int resultat = minProduit(a, n);
printf("Produit minimum : %d\n", resultat);
// Deuxième exemple
int b[] = {-1, 0};
int m = sizeof(b) / sizeof(b[0]);
printf("\nTableau : ");
for (int i = 0; i < m; i++)
printf("%d ", b[i]);
printf("\n");
resultat = minProduit(b, m);
printf("Produit minimum : %d\n", resultat);
return 0;
}import math
def minProduit(a, n):
if n == 1:
return a[0]
max_neg = -math.inf # Plus grand négatif (le plus proche de zéro)
min_pos = math.inf # Plus petit positif
cpt_neg = 0 # Compteur de négatifs
cpt_zero = 0 # Compteur de zéros
prod = 1 # Produit des éléments non nuls
for i in range(n):
# Ignorer si zéro
if a[i] == 0:
cpt_zero += 1
continue
# Compter et trouver le plus grand négatif
if a[i] < 0:
cpt_neg += 1
max_neg = max(max_neg, a[i])
# Stocker le nombre positif minimum
if a[i] > 0:
min_pos = min(min_pos, a[i])
prod *= a[i]
# Cas 1 : tous zéros ou que des zéros et positifs
if cpt_zero == n or (cpt_neg == 0 and cpt_zero > 0):
return 0
# Cas 2 : tous positifs
if cpt_neg == 0:
return min_pos
# Cas 3 : nombre pair de négatifs
if cpt_neg % 2 == 0 and cpt_neg != 0:
# Exclure le plus grand négatif (le plus proche de zéro)
prod = int(prod / max_neg)
return prod
# Tester la fonction
a = [-1, 1, -2, -2, 3]
n = len(a)
print(f"Tableau : {a}")
print(f"Produit minimum : {minProduit(a, n)}")
# Deuxième exemple
b = [-1, 0]
print(f"\nTableau : {b}")
print(f"Produit minimum : {minProduit(b, len(b))}") Sortie
Tableau : [-1, 1, -2, -2, 3] Produit minimum : -12 Tableau : [-1, 0] Produit minimum : -1
Sortie
// La sortie apparaîtra ici…
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.