Publicado hace 14 años por --3628-- a blog.seattleinterviewcoach.com

Recopilación de preguntas que distintos entrevistados por Google han ido facilitando. Están agrupadas por áreas.

t

esta bien saberlo

zakrion

Joer con las preguntitas para Software Engineer...

Sedda

#4

lol

D

#6 La coma se coló, pero ya no puedo editar.

anxosan

#12 Supongo que en ese caso la respuesta que buscan es que tienes que repartir de modo que te quedes sin nada (es la única opción donde, a priori, no sacan beneficio por matarte); aunque a mi me interesaría más saber como se llega a esa situación, es decir, si eres el jefe de los piratas ¿Qué mierda de jefatura es esa donde te matan si una decisión no le gusta a la mayoría?, ¿Cómo se asciende de rango?, ¿Si te matan tu sucesor tendrá el mismo problema? (porque en ese caso siempre puedes dejarle sin nada porque sabe lo que le espera si no está de acuerdo)...

Aguarate

#12 #13 lol un ejercicio parecido (parecido porque son piratas y 100 monedas nos pusieron en Discreta: Una banda de 17 piratas, se reúne para repartirse un cofre con más de cien monedas de oro. Efectuado
equitativamente el reparto sobra una moneda. En la pelea resultante para adjudicarla muere un pirata y
vuelven a realizar el reparto sobrando una moneda. ¿Cuál es el mínimo número de monedas que puede
contener el cofre?
Supongamos que la solución anterior es el número real de monedas que contenía el cofre y que la historia
continúa: siempre que sobran monedas en el reparto hay pelea y muere un pirata, ¿cuántos piratas quedarán
vivos cuando en el reparto no sobre ninguna moneda?

Se resuelve con ecuaciones diofánticas

j

Tranquilos. Màtigues está entretenido y no podrá esparcir la fuga por toda la costa cantábrica.

D

#5 no sé en las ingenierías (yo soy ingeniero pero comence haciendo física), pero en primero de física se nos hablaba sobre el calculo de magnitudes, para tener una primera idea.

Vamos a considerar un autobus de 9 x 3 x 2= 54 m3= 54.000.000 cm3 Si cada pelota tiene un diametro de 4 cm , y el volumen de una esfera es 4/3*pi*d^3. Para simplificar vamos a suponer que pi=3 (es por simplificar, es solo calculo de magnitudes), por lo tanto son 256 cm3 por pelota. Para hacer mas facil el calculo vamos a decir que son 270 cm3, por lo que caben unas 200.000 pelotas. Fácil ¿no?

j

#3: Si lo piensas bien, te darás cuenta que esa es precisamente la peor (por lo menos si quieres que te contraten)

D

#12 Podrías proponer repartir el botín entre 3 de los piratas y a los otros dos no darles nada. Incluso, podrías proponer quedarte la mitad del botín, a otros dos piratas darles un cuarto a cada uno y a otros dos nada. Lo más probable es que los otros dos piratas acepten.

totem

la del autobus es facil:

"Supongamos A un autobus cúbico de lado #A, y P1...Pn... pelotas de golf también cúbicas de lado #P. Entonces... "

D

Yo me estoy quedando noqueado haciendo esta:

You are given an array [a1 To an] and we have to construct another array [b1 To bn] where bi = a1*a2*...*an/ai. you are allowed to use only constant space and the time complexity is O(n). No divisions are allowed.

D

Pues a ver si se ponen las pilas porque algunos servicios como Google Groups están bastante necesitados de algo de cariño. De pensar lo felices que nos la prometíamos cuando compraron Deja News.

frankiegth

Para #8. Es que eso es precisamente lo que estudia un ingeniero de software en una buena universidad.

julictus

#6 Ahora que está editado, ¿a qué coma te referías?

Sermineitor

#4 Soy el único que alucina?

diophantus

#16 porque de todos es sabido que las esferas teselan el espacio, claaaro.

sotanez

#21 Me pregunto si eso lo tienes que hacer mientras está el entrevistador esperándote o más en plan examen.

jomi_mc

#12 El capitan se queda con 98 y se vota a si mismo, a otros 2 piratas les das 1 moneda, ya tienen beneficio suficiente. Los otros 2 votarian en contra, pero son 2 en contra contra 3 a favor. El capitan obtiene el mayor beneficio y salva el cuello. Es asi, es una pregunta que de una asignatura de libre eleccion de mi antigua universidad, asi que conozco la respuesta
La cuestion de este ejercicio es conseguir tu el mayor beneficio monetario posible, no darselo a otro
#16 256 cm^3 de pelota, no son ni las pelotas de un toro... 256 cm^3 es casi 1/4 de litro... te has colado en la formula del volumen de la esfera (es el radio, no el diametro) y es posible que en el calculo por lo demas el razonamiento es bueno

diophantus

#28 pero como que el razonamiento es bueno? Y el aire entre las pelotas quien se lo come?

woopi

#16 ¡¡¡270cm3 por pelota!!!! OMG!

C

#29 hmmmm ñam! aaaire gratis!!! lol

pedrobotero

tu prefieres ser soplanucas o comealmohadas?

d

#26 Por no hablar de las pelotas de 270cm^3, cosa de confundir radio y diámetro.
Digamos que no le faltara mucho para el millón con los datos propuestos y sabiendo que el cubo de lado 4 tiene 64cm^3

woopi

#29 el aire entre las pelotas, teniendo en cuenta el apilamiento, podría estimarse como un 25% del volumen total (Densidad de 1-pi/sqrt(18)).

IndividuoDesconocido

Pues a mi me ha gustado esta:
Dada una función que genera un número aleatorio entre 1 y 5 crear una función que genere un numero aleatorio entre 1 y 7
la estoy pensando

o o o o o
o o o o o o o

LesPaul

#14 por casualidad en qué universidad estudias? jaja es que ese mismo ejercicio lo hice yo tambien

araujo

#16 Estoy convencido de que la respuesta que esperan es la que ha dado #11: TODAS.

g

#28 Si claro, si los piratas son tontos sí, no creo que los piratas se conformaran con 1 moneda solamente. Pero sí, la respuesta sería darle a 2 la mínima cantidad para que acepten y al resto ni papa. No es muy complicado la verdad

j

#11, #37 La pregunta es "cuántas" caben, no "cuáles" caben. "TODAS" es una respuesta sumamente incorrecta

Y también para #5, este tipo de pregunta es lo que se denomina Problema de Fermi. La razón para este nombre está explicada de forma amena -como siempre- en Historias de la Ciencia: http://www.historiasdelaciencia.com/?p=15. También más info en la Wikipedia (http://es.wikipedia.org/wiki/Problema_de_Fermi) donde también se muestra cómo razonar ante estos problemas.

Oh, y son muy útiles. Básicamente cuando te hacen una pregunta de estas lo que van a ver es cómo reacciones ante una pregunta sobre la que a priori no tienes ni idea. Cómo improvisas. Para un buen ingeniero eso es MUY importante.

R

La idea de los piratas, por si alguien no lo ha visto es primero hablar con el pirata 5, el de rango mas bajo. Le explicas que no le interesa llegar a estar solo dos piratas, porque el otro se quedaría con todo y no vería nada. En el caso de 3 piratas el pirata 5 tiene que aceptar con una moneda o se queda sin nada. La otra moneda va para el pirata numero 3, para que acepte, ya que si quedan 4 piratas el pirata 2 le da 1 moneda al pirata 4 (que aceptaría porque sabe que de quedar 3 no se lleva nada). Por tanto el beneficio máximo que puede llegar a conseguir el pirata 3 es también de 1 moneda de oro. Y esto es válido para cualquier número de piratas, tienes que dar n-1/2 monedas de oro al resto de piratas (siendo n el numero de piratas, no de monedas) y te puedes quedar con el resto.

Ahora bien, si algun dia tengo que explicar esto a piratas borrachos de grog voy dandome por muerto

j

sorry por el double post, pero es que no había visto #35 antes. Yo voto por multiplicar el resultado de aplicar dos veces esa función y hacer módulo 7. Pero no tengo ni idea de si la distribución de lo que propongo sería uniforme... (claro, que ellos no dicen que tenga que serlo).

D

#28 #38 En el problema de los piratas, hagas lo que hagas siempre te cortarán el pescuezo. Los piratas saben que eliminando compañeros habrá más a repartir. La solución es delegar al pirata 5 para que reparta el oro para que le corten el pescuezo. Luego se delega en el pirata 4 para que reparta el oro y posiblemente también se le cortará el pescuezo. Y así hasta que solo quede 1 pirata.

R

#41 no, no lo seria, ya que como ejemplo, si tomas de 1 a 5, ningun resultado te dara modulo 0 (no aparece ni el 7, ni el 14 ni el 21), y si tomas el 0, el mod0 son demasiados resultados.

Desde mi punto de vista, al tener 25 posibles resultados (con dos llamadas a la función que te dan), y no ser este divisible entre 7, no tienes manera de hacerlo directamente y que sea completamente aleatorio, hay que descartar resultados. La manera mas sencilla de todas (que no la mejor) seria tomar dos numeros y traducir el equivalente en esta matriz:

00011
12223
33444
55566
6RRRR

Donde R seria repetir la obtención de indices (si, en teoria podria estar toda la eternidad para dar el resultado)

IndividuoDesconocido

edit he escrito lo mismo que #43

D

#35 Para ese problema; generas dos numeros aleatorios de 1 al 5 (A y B) y calculas (A+(B-1)*7)%7.

Y para hilar más fino si A+(B-1)*7 > 21 se debería volver a generar los números.

D

#45 Sorry! Edit La fórmula es (A+(B-1)*5)%7

RaiderDK

#41 #35
se aplica la funcion 7 veces sumando los resultados, obtenienod un numero entre 7 y 35, dividimos entre 7 y ya lo tenemos (para hacerla totalmente uniforme no tengo claro como redondear esa división, sigo pensando)

P

#43, ¿dónde dice que sólo sean dos llamadas?

Given a function which produces a random integer in the range 1 to 5, write a function which produces a random integer in the range 1 to 7.

La solución fácil es generar 7 números con el random5(), sumarlos y hacer módulo 7, de esta manera los valores están correctamente distribuidos del 1 al 7.

#41, con esa expresión condicionas mucho el resultado y la distribución, mira los ejemplos que me salen para 10 millones de generaciones:

1: 1199333
2: 1601725
3: 1598142
4: 1599275
5: 1601882
6: 1198989
7: 1200654

En cambio, con la solución propuesta de generar 7 números, sumarlos y realizar un módulo 7, el resultado es una distribución uniforme (aunque claro, la ejecución también tarda más):

1: 1429887
2: 1429379
3: 1428431
4: 1426998
5: 1428015
6: 1428564
7: 1428726

RaiderDK

#48 eso, el modulo lol

youknow

#25 Si ves la pelicula "Amanece que no es poco" lo entenderas. Se trata de la leccion que les esta enseñando el profesor a los alumnos. Es una pelicula muy surrealista tampoco intestes buscarle mucha explicacion.

g

#16 creo que las magnitudes físicas siguen siendo 7. Te refieres a los órdenes de magnitud

j

#50 "Causa admiración.. causa admiracióoon, causa admiración, cómo trabaja el corazón". Dios, qué grande es la escuela en esa película lol

PD: Found:


PD y las ingles:

D

#29 son órdenes de magnitud (aunque me haya confundido con la formula de la esfera, eso pasa por no mirarlo en google, fiarme de yahoo answers) El resultado te da una primera aproximacion válida, si te fijas en el calculo he dicho que pi=3. SI calculamos otra vez porque me he liado con el tamaño de la esfera, digamos que r= 2 cm (32 cm3) o r=2,5 cm (62,5 cm3). Para hacerlo mas facil voy a decir que V=54 cm3, por o que caben 1.000.000 de pelotas.
#51 cierto es. La hora vale como excusa?

antonrodin

De mayoria tengo cierta idea, no es un nivel tan alto como pensais en "SoftEng" la mayoria son de algoritmos bastante conocidos de una asignatura "cancer" de toda facultad "Estructuras de datos y metodos algoritmicos". Una persona recien salida de la carrera podria con la mayoria. Quizas es lo que buscan simplemente. Gente Joven, recien titulados y con un coeficiente altito y que vayan preparadas.

Muchas respuestas podeis encontrar aqui: http://www.casadellibro.com/libro-estructuras-de-datos-y-metodos-algoritmicos/925351/2900000944088

D

#41 #35 #48 más fácil

F7 = Parte entera de: (F5 + 2) / F5

mikibcn

#21 La forma de resolver la operación "a1 * a2 * .. * an / ai" sin divisiones es bien sencilla: "Si tenemos un número K * l / l el resultado es k"; de esta forma la operación se reduce a "a1 * a2 * ... a(i-1) * a(i+1) * ... * an".

Por otra parte veo que hay que hacer un recorrido al vector A y al vector B, cada uno con n posiciones, y eso es complejidad de tiempo O(n^2); así que NO PODRÉ TRABAJAR EN GOOGLE!!!!! cry

¿Seguro que se puede hacer en O(n), porque no veo la manera de recorrer A y B simultáneamente? ¿Algún ingeniero iluminado?

j

#55 No es que sea una distribución muy uniforme... http://yfrog.com/jddistributionp

Histograma hecho con MATLAB usando un millón de muestras.

j

#56 Sería tan fácil con divisiones... ¿se puede elevar a menos uno y multiplicar? lol

D

¿#55 y simplemente escalando?
f7= f5*7/5
no sé si matematicamente será consistente, pero no tiene porque no serlo.

Arvydas

una de las "faciles" es cuanto es 2 elevado a 64: un 1 seguido de 64 ceros en binario. Si alguien es capaz de calcularlo en decimal por el mismo y en menos tiempo, para mi es como jesucristo!

antonrodin

#60 Juraria que es del problema famoso de los granos de arroz y el tio que invento el ajedrez...salia la produccion mundial de los ultimos 1000 años o alguna burrada de esas:

P.D: uyyy por poco jejej http://wblog.trota-mundos.com/162/archivo/14/04/2006/fabula-del-emperador-chino-y-el-ajedrez/

en el libro que puse antes, fijate por donde que tambien aparece el problemilla :

D

#57 No se pide uniformidad en los resultados.

Arvydas

#61, seria ese numero multiplicado por 2, es decir, 18446744073709551616. A no ser que te lo sepas de memoria...es mucho mas elegante la respuesta en binario!

R

#56 Estoy contigo, me ha mosqueado un poco esa pregunta (lo bastante para hacerme perder un buen rato antes de irme a dormir). No veo manera de hacer en un tiempo O(n) si no tengo los dos strings ordenados de alguna forma (con ellos ordenados es trivial). Por tanto, como mucho, se baja a un orden n*log(n) que viene dado por la ordenación, pero mas alla, no veo nada.

j

#62 Hombre... vale. Entonces tengo una más sencilla: http://xkcd.com/221/

RamonMercader

las preguntas de ingeniero de software son bastante fáciles la mayoría. Menos las de bases de datos, que aún no he estudiado nada, la inmensa mayoría las se contestar, y sólo estoy en segundo

Aguarate

#36 Politecnica de Madrid lol

D

#65 como chiste vale.

w

#25 Alucina, que no es poco.

B4rret

A mi la que me descoloca mucho es esta :

You are at a party with a friend and 10 people are present including you and the friend. your friend makes you a wager that for every person you find that has the same birthday as you, you get $1; for every person he finds that does not have the same birthday as you, he gets $2. would you accept the wager?

Me recuerda a la paradoja del cumpleaños, solo que esa dice que dos personas cualesquiera tengan el mismo cumpleaños, no que haya otra que tenga el mismo que una persona en concreto...
No acabo de ver donde está la trampa de la pregunta, si es que la hay...

zakrion

#23 La mía aparece como mucho en la mitad de la tabla en rankings de universidades españolas y puedo decir que tengo la base como para responder a todas las preguntas si me lo preparo un poco. La mayoría de los problemas que plantean no los había visto en mi vida, pero se me ocurre mas o menos como plantearlos.

Mi comentario anterior iba mas bien orientado a que te piden saber mucho de todo, pero todo todo. Y eso no es para nada habitual en otras entrevistas para este tipo de puestos, pero bueno, está claro que Google quiere a los mejores.

zakrion

#70 Es fácil, no tienes que aceptar. Es muy poco probable que de esas 10 personas haya 1 que cumpla el mismo día que tú, y por eso te llevarías 1€. Sin embargo es muy probable que de esas 10 personas haya más de una que cumpla un día distinto al tuyo, y eso implicaría que tendrías que pagar 2€ por cada una de ellas a tu amigo.

Así que para no perder dinero, de esas 10 personas al menos 7 han de cumplir años el mismo día que tú (recibirías 7€), y las otras 3 cumplen por tanto otro día (tu amigo recibe 6€), con lo cual ganarías 1€.

f

#56 ¿De dónde sacas que recorrer dos arrays tiene complejidad O(n^2)? Querrás decir O(2*n), que es lo mismo que O(n).

f

#56 Ah, perdona, que estás multiplicando una y otra vez... así si sale O(n^2).

a

A mí se me ocurre para lo del número aleatorio hacer lo siguiente:

- Al resultado que nos de la F5 restarle 1 para que siempre nos de un número de 0 a 4.
- Pensar hacer lo mismo para la F7 para que necesitemos un número de 0 a 6
- Llamar 5 veces seguidas a la F5 y sumar los resultados, por lo que nos va a devolver un número entre 0 y 20
- Hacer módulo 7 el resultados obtenido (tendremos siempre un resultado entre 0 y 6)
- Sumar 1 a ese resultado y ya tenemos el aleatorio

Creo que así existe la misma probabilidad de sacar cualquier de los números, aunque con la pega de que siempre se realiza la llamada a la F5 5 veces, pero creo que no decían nada en contra de hacerlo así

g

#66 Dudo mucho que 1º de carrera estudiáseis tantos conceptos como para afirmar que las preguntas son fáciles. No todo es quick y mergesort, ¿o es que ya en primero dísteis árboles binarios, montículos, tablas hash...?

B4rret

#72 Ya, si eso también lo veo yo, pero es que no se me quita de la cabeza que es como una respuesta muy simplona. Por eso pensaba que a lo mejor podía tener trampa... Pero a saber, quizás jueguen también con esto

f

# Ya tengo cómo hacerlo en O(n). Necesitamos dos arrays adicionales.

c[i]= a(1)*a(2)*...*a(i-1) = c[i-1] * a[i-1]
d[i] = a(i+1)*...a(n-1)a(n) = d[i+1] * a[i+1]

Casos especiales son c(1) y d(n) que valen 1.

Y luego calculamos b(i)=c(i)*d(i).

En total recorremos los arrays 3 veces, luego tenemos O(n).

a

Para ir del punto A al punto B sin estar seguro de que podras llegar:

La respuesta que el entrevistador de de recursos humanos quiere oir es:

-Buscaria un punto A' desde donde si pueda llegar a B.

Es una pregunta que aqui tambien se hace en las empresas.... pero ojo despues te preguntan : ponga un ejemplo de alguna vez que le haya sucedido y haya resuelto llegar a b con exito.

D

#21 #56 #64 #73 #78

no se si es lo mismo que #78 (que no lo acabo de ver...):

Procedure trabajarengoogle (var a,b: array of integer ; m,i:integer);

begin
trabajarengoogle (a, b, m*a[i], i+1);
b[i]:= m;
end;

Yo creo que esa es la idea, ya que es simple y se recorre el array una sola vez...

Si al final va a ser mas dicil trabajar en google que los examenes de mi facultad y todo

Si alguien da trabajo, y aunque no sea en google, esta bien, me apunto!!

a

#80 Qué es 'm'?

Por lo que veo en tu universidad también se programa en pascal/delphi, no?

D

#80 #81

i lo uso para recorrer el array, m para ir guardando la multiplicacion (y asi a la vuelta de recursividad asignarlo a b).

La llamada inicial al procedimiento seria:

trabajarengoogle (a, b, 1, 1);

#81 Pues si, con pascal aprendi...

a

#78 Lo he estado pensando y no veo por qué se tienen que recorrer los arrays 3 veces. Necesitas recorrer 'a' 1 vez para obtener 'c' y 'd', ¿no? Y luego recorrer 1 vez 'b' para ir asignando los resultados. ¿Hay algo que no he entendido de tu planteamiento?

#82 Con lo que tienes puesto no haces nunca la división (o el no multiplicar el elemento 'i') que piden

De todas formas, y corrígeme/me corrijan si me equivoco, pero usar recursividad para recorrer una lista no es muy buena idea porque consumes "mucha" memoria en cada iteración, lo cual no ocurre si lo haces con un bucle

D

#83 Si lo hace(en forma de no multiplicar el elemento i, que para eso pone No divisions are allowed.), mira, te hago un mini-seguiemiento, pero si lo vas haciendo tu entero veras que si sale:

Lo que hay que hacer es esto bi = a1*a2*...*an/ai.

Yo al terminar de "ir en la recursividad" tengo en m a1*a2*...*an, y al volver de reursividad
a bn le asigno a1*a2*...*an-1
.
.
.
a b5 le asigno a1*a2*...*a4
a b4 le asigno a1*a2*...*a3

etc.

Sobre lo que dices sobre la memoria, yo del enunciado lo que entiendo es que no quieren que andes copiando/duplicando el array, no que tenga que ser economico en memoria, de hecho no se como se podria hacer con un bucle y que la complejidad sea O(n).
Si sabes como o tienes la idea comentala, que esta curioso el problema este.

r

a=[2,5,7,12,57,122]
def arreglar(arreglo):
ciclos=0
b=[1 for x in arreglo]
largo=len(arreglo)
for i in range(largo):
for j in range(largo):
ciclos+=1
if(j!=i):
b[j]*=arreglo[i]
print b
print ciclos
arreglar(a)

A mí me salió así, pero no pude bajar el O(n^2) y por lo que vi ninguna de las soluciones que se plantearon acá lo hace.

leonard_shelby

#39 Cabe una.

D

#85 lo que yo digo en #84, que con un bucle complicada esta la cosa..., yo ando un poco perdido con los ordenes (hace tiempo que no los toco), pero por lo que recuerdo me parece que la solucion que doy yo es O(n), si no es asi, me gustaria que me explicaras porque, ya que te ve puesto en ordenes .

r

#84 El tuyo tiene orden n², si no sería la solución ya que cualquier función recursiva se puede convertir en recursiva de cola, y cualquier función recursiva de cola se puede convertir en iterativa.
(ah, el código anterior está en python, pero se lee muy mal por falta de indentación)

Kerensky

#78 #80 No se si acabo de entender qué quiere decir you are allowed to use only constant space. ¿Descartaría eso Arrays auxiliares y/o funciones recursivas?

f

#84 Perdona, pero b(i) = a(1) * ... * a(i-1) no es lo que piden... ni para calcularlo te hace falta recursividad ninguna...

f

#83 Aunque calcules c y d en el mismo bucle, estas realizando dos multiplicaciones en cada paso... Por lo tanto el numero de operaciones es 2n, independientemente de que lo hagas en un bucle o en dos...

D

#84

tienes razon, hay un error, y gordo.
un 0 como un rosco al canto lol

Irrelevanterrimo

He leido todos los post y he llegado a la conclusión que a Google se la pela como consigas un número aleatorio entre 1 y 7 con una función de 1 a 5... lo que quiere son flames como este hablando de google. lol lol

Por cierto, para hacer un número aleatorio entre 1 y 7 hay que hacer:

int random7()

y a seguir...

a

Con #80, #82 y #84:
Para a=:
i=1:
trabajarengoogle (a, b, 1, 1);
b[1] = 1
i=2:
trabajarengoogle (a, b, 2, 2);
b[2] = 2
i=3:
trabajarengoogle (a, b, 8, 3);
b[3] = 8
i=4:
trabajarengoogle (a, b, 48, 4);
b[4] = 48
i=5:
trabajarengoogle (a, b, 384, 5);
b[5] = 384
Resultado final:
b=

Sin embargo, el resultado que debería quedar es:
b=

¿Estoy siguiendo bien tu función o hay algo que se me ha escapado?

Edito: no había visto #92

#85 Yo lo había pensado de forma similar a la tuya, pero claro, el orden de complejidad no es O(n)

#89 Creo que descarta arrays auxiliares, pero no estoy seguro, y la verdad es sin arrays auxiliares no se me ocurre

a

#91 Pues tienes razón, lo había entendido al principio con que recorrías cada array 3 veces, pero ya veo a lo que te referías

r

#92 Podrías escribirlo de manera que funcione?
Tal como está tu algoritmo no se detiene nunca.

D

#89
Hummm....

D

#96 no funciona, la idea es mala ya que no hace el calculo que pide, asi que da igual que le meta la condicion de parada...

v

Para el problema de los arrays a_i y b_i, ¿vale con usar logaritmos?

r

Bueno, el de los arrays quedó así, usa un array adicional, mejor no me sale.

def arreglar4(a):
ciclos=0
b=[1 for x in a]
c=[1 for x in a]
largo=len(a)
for i in range(1,largo):
b[i]=a[i-1]*b[i-1]
ciclos+=1
for i in range (largo-1,0,-1):
c[i-1]=a[i]*c[i]
print i
ciclos+=1
print c
for i in range (0,largo):
b[i]*=c[i]
ciclos+=1
print b
print ciclos

1 2