terça-feira, 19 de dezembro de 2017

Problema do balanceamento da carga


Compartilhe!

O objetivo do programa em C abaixo é conferir se dados quatro valores é possível agrapá-los em dois grupos de igual valor. Sendo eles os valores/pesos de 4 containers, determinar se é possível estabelecer um balanceamento da carga perfeito, ou seja, se é possível dividir a carga na parte traseira e dianteira da espaçonave de tal forma que o peso na parte traseira seja igual ao peso na parte dianteira.

#include <stdio.h>

int main(){

 int c1, c2, c3, c4, soma, metade;

 scanf("%d %d %d %d", &c1, &c2, &c3, &c4);//Leitura dos valores de entrada

 soma = c1 + c2 + c3 + c4; //Conferir a soma da carga.
 
 if (soma % 2 == 0){ //Se for um valor par, sabemos ser possível dividir em 2.
  
  metade = soma/2; //Conferir a metade.
  if (metade == c1 || metade == c2 || metade == c3 || metade == c4){

   printf("sim\n");//É possível dividir as cargas de duas maneiras: (1)um container apenas de um lado e os outros três do outro ou (2) dois containers de cada lado.
  } else 
   if ((metade == c1 + c2)||(metade == c1 + c3)||(metade == c1 + c4)
   ||(metade == c2 + c3)||(metade == c2 + c4)
   ||(metade == c3 + c4)) //Existem 6 possíveis combinações caso cada lado tenha dois containers.
    printf("sim\n");
   else 
    printf("nao\n");//A soma é par no entanto não é possível dividir os containers de um dos dois modos.

 } else 
  printf("nao\n");
 

 return 0;
}