Respuesta a la pregunta sobre el plátano de Warhouse

programación


Un almacén, que de otra manera se llama almacén, es una edificación que se utiliza para almacenar materias primas o productos manufacturados hasta su exportación a otros lugares.

Hay n número de depósitos que se utilizan para almacenar y madurar grandes cantidades de plátanos. Una vez que los plátanos estén maduros, cada propietario de un almacén empacará todos esos plátanos como una sola unidad y los transportará al aeropuerto para exportarlos a otros países. Todos estos almacenes están cerca unos de otros y los propietarios son amables. Entonces, mientras transportan los plátanos, les gustaría compartir el vehículo (si es posible) para reducir el costo de transporte. Pero sólo dos personas pueden compartir un vehículo y cada vehículo puede transportar un peso de “w” toneladas a la vez.

Dada una matriz que representa los pesos de plátanos de cada propietario, el límite máximo que puede contener el vehículo, encuentre el número mínimo de vehículos necesarios para transportar todos los plátanos al aeropuerto.
Nota: No hay cargas que sean más pesadas que el límite indicado.
El peso de los plátanos se mide en toneladas.

Lo que he probado:

obteniendo una respuesta incorrecta para el código

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

Solución 2

Debes limpiar y depurar tu código. Comience con una interacción de usuario mejorada.

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

Será mejor que utilice alguna estructura en su código para una mejor legibilidad, como para un vehículo

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

Obtenga más resultados, como en la comparación.

Visita algunos Tutorial de aprendizaje de C resolver tu tarea.

コメント

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