Me estoy preparando para HP CodeWars 2014 resolviendo problemas de años anteriores, pero me quedé atrapado en este problema, esperando que alguien me ayude.

Aquí está el algoritmo de verificación de dígitos UPC:

  • Primero, agregue todos los dígitos en las posiciones impares y multiplique el resultado por tres.
  • Luego, agregue los dígitos en las posiciones pares al resultado.
  • Luego, encuentra el módulo 10 de la suma. Modulo calcula el resto después de dividir la suma por 10.
  • Finalmente, si el resto no es cero, restarlo de 10.

Entrada

La primera línea de entrada contiene el número de UPC que siguen. Los dígitos de cada UPC estarán separados por un espacio.

6

0 1 2 3 4 5 6 7 8 9 0

0 3 6 0 0 0 2 9 1 4 5 

0 7 3 8 5 2 0 0 9 3 8 

0 7 0 7 3 4 0 5 3 1 6

0 4 1 2 2 0 1 8 9 0 4 

0 3 7 0 0 0 2 0 2 1 4 

Salida

Para cada UPC, el programa debe imprimir el UPC, incluido el dígito de verificación calculado. Los dígitos de cada UPC deben estar separados por un solo espacio.

0 1 2 3 4 5 6 7 8 9 0 5

0 3 6 0 0 0 2 9 1 4 5 2

0 7 3 8 5 2 0 0 9 3 8 5

0 7 0 7 3 4 0 5 3 1 6 0

0 4 1 2 2 0 1 8 9 0 4 5

0 3 7 0 0 0 2 0 2 1 4 1

Aquí está mi programa pero parece fallar en alguna parte. Por favor, ayúdame a encontrar el error.

n=input()
for i in range(1,n+1):
    seq=raw_input()
    ar=seq.split(" ")
    l=len(ar)
    res=0
    sume=0
    sumo=0
    for k in range(0,l):
        if k%2==0:
            sume+=int(ar[k])
        else:
            sumo+=int(ar[k])
    res=(sumo*3+sume)%10
    if res!=0:
        res=10-res
    print seq,res

Error :

El resultado no es el esperado. Obtengo resultados incorrectos, ¡supongo que hay algún error lógico!

-3
Evenure 2 sep. 2014 a las 18:36

2 respuestas

La mejor respuesta

Su cheque para pares e impares es al revés. Si cambias

if k%2==0:
    sume+=int(ar[k])
else:
    sumo+=int(ar[k])

Para

if k%2==0:
    sumo+=int(ar[k])
else:
    sume+=int(ar[k])

Su código genera los valores correctos. Creo que la descripción supone que el primer dígito está numerado "1" en lugar de "0".

1
chthonicdaemon 2 sep. 2014 a las 15:06
n=input()
for i in range(1,n+1):
seq=raw_input()
ar=seq.split(" ")
l=len(ar)
res=0
sume=0
sumo=0
for k in range(0,l):
    if k%2==0:
        sume+=int(ar[k])
    else:
        sumo+=int(ar[k])
res=(sumo*3+sume)%10
if res!=0:
    res=10-res
print seq,res
0
egg 14 mar. 2016 a las 20:18