Ejercicio: 1Eva2010TII_T3 Juego del amigo secreto

Inicie preguntando el número de parejas que van a participar.
Por simplicidad, considere solo una pareja para luego realizarlo para n parejas .
El sorteo se registra con arreglos/vectores que contienen las banderas de amigo/amiga en cero,
AmigA = np.zeros(n+1,dtype=int)
AmigO = np.zeros(2*n+1,dtype=int)
Si n=10, se obtienen los arreglos siguientes:
El arreglo de los caballeros debe reflejar la AmigA que tiene con el sorteo:
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
| AmigA[i] | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
El arreglo para las damas debe reflejar el AmigO que tiene con el sorteo:
| j | ... 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| Amig0[j] | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
para poner luego el valor sorteado a cada uno, si aún no se ha repetido.
dama = int(rnd.random()*n)+(n+1)
El valor repetido se verifica revisando el estado del arreglo en la posición correspondiente, esperando que sea vacío AmigO[dama]==0, solo allí se asigna el amigo y se pasa al siguiente sorteo.
# sortea dama para cada AmigO
i = 1
while (i<=n):
dama = int(rnd.random()*n)+(n+1)
if (AmigO[dama]==0):
AmigO[dama] = i
i = i+1
Ejemplo, Si i=1, y el aleatorio de dama=12, se tiene que:
| j | ... | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| Amig0[j] | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
ser repite el mismo proceso para el otro género.
Algoritmo en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2010_T3 Juego del amigo secreto
# Propuesta de solucion. edelros@espol.edu.ec
import numpy as np
import random as rnd
# INGRESO
n = int(input('¿número de parejas?: '))
# PROCEDIMIENTO
AmigA = np.zeros(n+1,dtype=int)
AmigO = np.zeros(2*n+1,dtype=int)
# sortea dama para cada AmigO
i = 1
while (i<=n):
dama = int(rnd.random()*n)+(n+1)
if (AmigO[dama]==0):
AmigO[dama] = i
i = i+1
# sortea caballero para cada AmigA
j = n+1
while (j<=(2*n)):
caballero = int(rnd.random()*n)+1
if (AmigA[caballero]==0):
AmigA[caballero] = j
j = j+1
# SALIDA
print('pareja de caballeros')
i = 1
while (i<=n):
print(i,' , ',AmigA[i])
i = i+1
print('pareja de damas')
j = n+1
while (j<=(2*n)):
print(j,' , ',AmigO[j])
j = j+1
Resultado del algoritmo
¿número de parejas?: 5
pareja de caballeros
1 , 10
2 , 8
3 , 7
4 , 6
5 , 9
pareja de damas
6 , 3
7 , 4
8 , 1
9 , 2
10 , 5
>>>
Diagrama de Flujo

