La descripción del problema original se encuentra . Para este ejercicio se ha simplificado un poco.
El problema consiste en repartir el canto de la canción de Happy Birthday entre las invitados de una fiesta. Si no recuerdas la canción de Happy Birthday es la siguiente (la festejada se llama Rujia):
Happy birthday to you
Happy birthday to you
Happy birthday to Rujia
Happy birthday to you
Cada persona debe cantar en orden al menos una palabra de la canción, así que si son 5 personas el reparto sería el siguiente:
Persona 1: Happy
Persona 2: birthday
Persona 3: to
Persona 4: you
Persona 5: Happy
Persona 1: birthday
Persona 2: to
Persona 3: you
Persona 4: Happy
Persona 5: birthday
Persona 1: to
Persona 2: Rujia
Persona 3: Happy
Persona 4: birthday
Persona 5: to
Persona 1: you
Observa que la canción contiene 16 palabras, así que si hay 17 personas o más la canción se debe cantar completa nuevamente hasta que todas las personas hayan podido cantar al menos una parte de la canción.
Entrada
La entrada consiste en un número N entero positivo menor a 200, que indica el número de personas invitadas.
Salida
Debes imprimir el reparto de la canción entre las personas como en el ejemplo anterior.
Ejemplo de entrada
20
Ejemplo de salida
Persona 1: Happy
Persona 2: birthday
Persona 3: to
Persona 4: you
Persona 5: Happy
Persona 6: birthday
Persona 7: to
Persona 8: you
Persona 9: Happy
Persona 10: birthday
Persona 11: to
Persona 12: Rujia
Persona 13: Happy
Persona 14: birthday
Persona 15: to
Persona 16: you
Persona 17: Happy
Persona 18: birthday
Persona 19: to
Persona 20: you
Persona 1: Happy
Persona 2: birthday
Persona 3: to
Persona 4: you
Persona 5: Happy
Persona 6: birthday
Persona 7: to
Persona 8: Rujia
Persona 9: Happy
Persona 10: birthday
Persona 11: to
Persona 12: you
Solución
Sabemos que la canción se debe cantar nuevamente si hay personas que no alcanzan a cantarla.
¿Cómo sabemos cuántas veces se debe cantar la canción completa?
Respuesta: Usando la división y el residuo.
Como son 16 palabras a cada persona le debe tocar al menos una palabra de la canción, si dividimos el número de personas entre el número de palabras nos indica cuántas veces podemos repetir la canción.
Si hay un residuo indica que hubo 1 o más personas que se quedan sin cantar, así que se debe repetirla una vez más. Veamos el código.
#include <iostream>
#include <string>
using namespace std;
int main() {
int guests;
string song[16] = {
"Happy", "birthday", "to", "you",
"Happy", "birthday", "to", "you",
"Happy", "birthday", "to", "Rujia",
"Happy", "birthday", "to", "you",
};
cin >> guests;
// Calculamos cuantas veces se debe cantar la canción
int song_times = guests / 16;
if (guests % 16 != 0) {
song_times ++;
}
// Imprimimos la canción el número de veces requerido
// para que todos los invitados al menos la canten una vez
for (int i = 0; i < song_times * 16; i++) {
// Nos auxiliamos del operador módulo para rotar los invitados
int guest = (i % guests) + 1;
// Nos auxiliamos del operador módulo para rotar las palabras
// de la canción
string word = song[i%16];
// Imprimimos la persona y la palabra que le toca
cout << "Persona " << guest << ": " << word << endl;
}
return 0;
}
Tarea
Repasar las divisiones o el operador módulo.
Divide y obtiene el residuo los número del 0 al 20 entre 2, 3, 4, 5 y 6. Observa como se comporta el residuo.
Encuentra otra forma y rescribe el código sin usar el operador módulo para rotar las palabras y las personas.