Réponse à la question de la banane Warhouse

la programmation


Un godown, autrement dit appelé entrepôt, est un bâtiment utilisé pour stocker des matières premières ou des produits manufacturés jusqu’à ce qu’ils soient exportés vers d’autres endroits.

Il existe un certain nombre de descentes qui sont utilisées pour stocker et faire mûrir de grandes quantités de bananes. Une fois les bananes mûries, chaque propriétaire de Godown emballera toutes ces bananes en une seule unité et les transportera à l’aéroport pour les exporter vers d’autres pays. Tous ces lieux sont proches les uns des autres et les propriétaires sont sympathiques. Ainsi, lors du transport des bananes, ils aimeraient partager le véhicule (si possible) afin de réduire les coûts de transport. Mais seules deux personnes peuvent partager un véhicule et chaque véhicule peut transporter un poids de « w » tonnes à la fois.

Étant donné un tableau représentant les poids des bananes de chaque propriétaire, la limite maximale que le véhicule peut contenir, trouvez le nombre minimum de véhicules nécessaires pour transporter toutes les bananes jusqu’à l’aéroport.
Remarque : Aucune charge ne dépasse la limite indiquée.
Le poids des bananes se mesure en tonnes.

Ce que j’ai essayé :

obtenir une mauvaise réponse pour le code

C
#include <stdio.h>
#include <stdlib.h>

void clearInputBuffer() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
}

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int minVehicles(int arr[], int n, int capacity) {
    // Sort the array in non-decreasing order
    qsort(arr, n, sizeof(int), compare);

    // Use two pointers approach to count the number of vehicles needed
    int count = 0;
    int i = 0;
    int j = n - 1;
    while (i <= j) {
        // If the sum of the current pair is less than or equal to the capacity, load both items
        if (arr[i] + arr[j] <= capacity) {
            i++;
            j--;
        } else {
            // If not, load the heavier item in a separate vehicle
            j--;
        }
        count++;
    }

    return count;
}

int main() {
    int n, capacity;
    printf("Enter the weights of the items separated by space: ");
    
    // Read the weights of the items in a single line
    scanf("%d", &n);
    int *arr = (int *)malloc(n * sizeof(int));

    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    clearInputBuffer(); // Clear the input buffer

    printf("Enter the capacity of each vehicle: ");
    scanf("%d", &capacity);

    int result = minVehicles(arr, n, capacity);

    printf("Minimum number of vehicles required: %d\n", result);

    free(arr);

    return 0;
}

Solution 2

Vous devez nettoyer et déboguer votre code. Commencez par une interaction utilisateur améliorée.

C++
int main() {
    int n, capacity;
    printf("Enter the count of the items: ");
    
    // Read the weights of the items in a single line
    scanf("%d", &n);
    int *arr = (int *)malloc(n * sizeof(int));

    for (int i = 0; i < n; i++) {
        printf("Enter the weights of the item %d separated by space: ", i);
        scanf("%d", &arr[i]);
    }

Vous feriez mieux d’utiliser une structure dans votre code pour une meilleure lisibilité, comme pour un véhicule

C++
struct Vehicle {
 int identifier; // like index
 int maxLoad;
 int currentLoad;
}

Faites plus de sortie, comme dans la comparaison.

Visitez quelques-uns Tutoriel Apprendre le C résoudre tes devoirs.

コメント

タイトルとURLをコピーしました