Dev - C++ - Ayuda con ciclos

 
Vista:
sin imagen de perfil

Ayuda con ciclos

Publicado por lapinillaar (4 intervenciones) el 22/10/2015 22:13:01
Hola! agradecería su ayuda con este problema,lo tengo que resolver por ciclos y no se como abordarlo.
Muchas gracias


En la convencion republicana, se reunen 100 personas de las cuales x son mujeres
e y son hombres. Si en la convencion se dispone de z mesas y se dispone que la
diferencia entre numero de hombres y mujeres en cada mesa no debe superar 2.


>Cuantas sillas para mujeres se deben poner por mesa?,
>Cuantas sillas por hombre se deben poner?.

Si los votos de las mujeres valen 1:5 veces los votos del hombre.
>Cuantas mujeres deberan estar en la convencion para que el candidato sea elegido
por votos de solo mujeres?
Si los votos de los hombres valen 1:5 veces los votos de
las mujeres
. >Cuantas mujeres deberan estar en la convencion para que el candidato
sea elegido por votos de solo mujeres?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con ciclos

Publicado por agustin (522 intervenciones) el 23/10/2015 14:31:56
Para resolver el problema yo haria algo asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
 
int metodo(int hombres,int mujeres,int mesas)
{
   int **matriz;
   int i,retval=0;
   int error=0;
 
   matriz=(int**)calloc(mesas,sizeof(int**));
   if(matriz != NULL){
      for(i=0;i<mesas;i++){
         matriz[i]=(int*)calloc(2,sizeof(int*));
         if(matriz[i] == NULL){
            error=1;
            break;
         }
      }
 
      if(error == 0){
         do{
            for(i=0;i<mesas;i++)
               if(hombres>0){
                  matriz[i][0]++;
                  hombres--;
               }else{
                  break;
               }
         }while(hombres > 0);
 
         do{
            for(i=0;i<mesas;i++)
               if(mujeres>0){
                  matriz[i][1]++;
                  mujeres--;
               }else{
                  break;
               }
         }while(mujeres > 0);
 
         for(i=0;i<mesas;i++)
            if(matriz[i][0] > matriz[i][1] && matriz[i][0] - matriz[i][1] > 2){
               retval=1;
               break;
            }else if(matriz[i][0] < matriz[i][1] && matriz[i][1] - matriz[i][0] > 2){
               retval=1;
               break;
            }
 
         if(retval == 0){
            printf("Reparto correcto\n");
            printf("Reparto mesas:\n");
            for(i=0;i<mesas;i++)
               printf("%d hombres y %d mujeres\n",matriz[i][0],matriz[i][1]);
         }else{
            printf("Reparto incorrecto\n");
         }
      }
   }
   for(i=0;i<mesas;i++)
      if(matriz[i] != NULL)
         free(matriz[i]);
   if(matriz != NULL)
      free(matriz);
   return retval;
}
//---------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
   int mesas;
   int totalPersonas=100;
   int hombres;
   int mujeres;
 
   printf("Introduce la cantidad de hombres que asisten: ");
   scanf("%d",&hombres);
   mujeres=totalPersonas-hombres;
   printf("Introduce la cantidad de mesas: ");
   scanf("%d",&mesas);
 
   metodo(hombres,mujeres,mesas);
 
   fflush(stdin);
   getchar();
   return 0;
}
//---------------------------------------------------------------------------

Ese metodo te rellena un array y te muestra como quedarian las mesas. El caso es que en tu problema no explica muy bien y no dice si tiene que haber la misma cantidad de hombres en cada mesa o si debe haber la misma cantidad de mujeres en cada mesa asi que hago el reparto y solo compruebo que en cada mesa no haya mas de dos de uno sobre el otro.

Otra cosa, si el voto de la mujer vale 1/5 del del hombre pues tienes que necesitas x=(y*5)+1 donde x son las mujeres e y los hombres.
Y en el ultimo, si el voto del hombre vale 1/5 del de la mujer pues tienes que necesitas x=(y/5)+1 donde x son las mujeres e y los hombres.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con ciclos

Publicado por agustin (522 intervenciones) el 23/10/2015 18:33:25
Otro modo que se me ocurre es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
int metodo2(int hombres,int mujeres,int mesas)
{
   int retval=0;
   int hombresXMesa,mujeresXMesa,restoHombres,restoMujeres;
   int itemMayor,itemMenor,restoItemMayor,restoItemMenor; //variables auxiliares
 
   //Calculo el numero de hombres por mesa y las que sobran
   hombresXMesa=hombres/mesas;
   restoHombres=hombres%mesas;
 
   //Calculo el numero de mujeres por mesa y las que sobran
   mujeresXMesa=mujeres/mesas;
   restoMujeres=mujeres%mesas;
 
   //Uso unas variables auxiliares donde almaceno el valor mayor y su resto y
   //el menor y su resto
   if(hombresXMesa > mujeresXMesa){
      itemMayor=hombresXMesa;
      restoItemMayor=restoHombres;
      itemMenor=mujeresXMesa;
      restoItemMenor=restoMujeres;
   }else{
      itemMayor=mujeresXMesa;
      restoItemMayor=restoMujeres;
      itemMenor=hombresXMesa;
      restoItemMenor=restoHombres;
   }
 
   //Comprobacion del reparto
   if(itemMayor > itemMenor){ //Si uno es mayor que otro
      //Toca repartir las personas sobrantes en las mesas y dependiendo de cada
      //situacion la comprobacion varia
      if(restoItemMayor > restoItemMenor && itemMayor - itemMenor >= 2)
         //Si sobran mas del mayor que del menor y la diferencia entre hombres y
         //mujeres por mesa es de 2 o mas no se puede ya que al repartir se sobrepasarian
         //las dos personas de mas
         retval=0;
      else if(restoItemMayor > restoItemMenor && itemMayor - itemMenor < 2)
         //Si sobran mas del mayor que del menor y la diferencia entre hombres y
         //mujeres por mesa es menor que 2 si se podrá
         retval=1;
      else if(restoItemMayor < restoItemMenor && itemMayor - itemMenor <= 2)
         //Si sobran menos del mayor que del menor y la diferencia entre hombres y
         //mujeres por mesa es de 2 o menos si se podrá
         retval=1;
      else if(restoItemMayor == restoItemMenor && itemMayor - itemMenor <= 2)
         //Si sobran la misma cantidad de hombres que de mujeres si se podrá siempre
         //y cuando la diferencia entre mujeres y hombres por mesa sea de 2 o menos
         retval=1;
      else if(itemMayor - itemMenor > 2)
         //Si la diferencia entre hombres y mujeres por mesa es de mas de 2 no se puede
         retval=0;
   }else{
      //Si la cantidad de hombres y mujeres por mesa son iguales siempre será posible
      //el reparto
      retval=1;
   }
 
   if(retval==1){ //Si se pudo repartir correctamente
      printf("Reparto posible. Se reparte de la siguiente manera:\n");
      if(restoHombres > 0 && restoMujeres > 0){ //Si sobraban hombres y mujeres
         if(restoHombres > restoMujeres){ //Si sobraron mas hombres que mujeres
            printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa+1,restoMujeres);
            printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa,restoHombres - restoMujeres);
            printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoHombres);
         }else if(restoHombres < restoMujeres){ //Si sobraron mas mujeres que hombres
            printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa+1,restoHombres);
            printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa+1,restoMujeres - restoHombres);
            printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoMujeres);
         }else{ //Si sobraron la misma cantidad de hombres y de mujeres
            printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa+1,restoHombres);
            printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoMujeres);
         }
      }else if(restoHombres > 0){ //Si sobraron solo hombres
         printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa+1,mujeresXMesa,restoHombres);
         printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoHombres);
      }else{ //Si sobraron solo mujeres
         printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa+1,restoMujeres);
         printf("%d hombres y %d mujeres en %d mesas\n",hombresXMesa,mujeresXMesa,mesas - restoMujeres);
      }
   }else{ //Si no se pudo realizar un reparto correcto
      printf("Reparto imposible.\n");
   }
   return retval;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con ciclos

Publicado por lapinillaar (4 intervenciones) el 30/10/2015 16:22:53
Muchas gracias :)
Tengo una duda, por que sumas 1 al repartir las personas en las mesas??

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar