Jump to content
Gabaum

Resolução URI - 1557

Recommended Posts

Gabaum
def imprime_matriz(matriz,T):
    ordem = len(matriz)
    string =" "
    if ordem!=2:
        for i in range(ordem):
            for j in range(ordem):
                tam_e = len(str(matriz[i][j]))
                menos = tam_e-1
                if j == 0:
                    if tam_e < T:
                        print("%s%d"%(string*(T-menos-1),matriz[i][j]),end="")
                    else:
                        print("%s%d"%(string*(T-2-(tam_e-2)),matriz[i][j]),end="")
                elif j == ordem-1:
                    if tam_e < T:
                        print(" %s%d"%(string*(T-menos-1),matriz[i][j]))
                    else:
                        print(" %s%d"%(string*(T-2-(tam_e-2)),matriz[i][j]))
                else:
                    if tam_e < T:
                        print(" %s%d"%(string*(T-menos-1),matriz[i][j]),end ="")
                    else:
                        print(" %s%d"%(string*(T-2-(tam_e-2)),matriz[i][j]),end ="")
    else:
        print("1 2\n2 4")
    print("")
while True:
    ordem = int(input(""))
    if ordem == 0:
        break
    else:
        if ordem==1:
            val = 1
            print("%1d\n"%val)
        else:
            matriz = []
            maior = 0
            for i in range(ordem):
                linha = []
                for j in range(ordem):
                    termo = 2**(i+j)
                    if termo>maior:
                        maior = termo
                    linha.append(termo)
                matriz.append(linha)
            maior = str(maior)
            tam = len(maior)            
            imprime_matriz(matriz,tam)

Praticando um pouco de programação Python no URI vi um problema fácil, mas que pouca gente tinha conseguido faze-lo devido a saída..e resolvi publicar aqui esta resolução em Python por achar meio "injusto" python não contar com uma função para usar o espaçamento dinâmico, diferentemente de C e C++

Share this post


Link to post
Share on other sites
pwseo

@Gabaum,

Quando falas em espaçamento dinâmico estás a referir-te ao operador %*s presente na especificação da família de funções *printf? Python também tem essa possibilidade... Repara no seguinte código + seu output:

#!/usr/bin/env python3

from sys import argv

# Criar matriz
n = int(argv[1])
mat = [[0] * n for _ in range(n)]

# Definir largura máxima para os números
width = len(str((2 ** (n-1)) ** 2))

# Preencher a matriz
for x in range(n):
    for y in range(n):
        mat[y][x] = (2 ** x) * (2 ** y)

# Imprimir a matriz
for l in mat:
    for c in l:
        # A chave está aqui, ao utilizarmos {:{}d}.
        # O conjunto de {} interiores vai ser substituido por 'width',
        # antes de ser feita a substituição do {} de fora, que depois
        # será substituído por 'c'.
        print('{:{}d} '.format(c, width), end = '')
    print('')

E agora o output:

~ $ python3 mat.py 4
 1  2  4  8 
 2  4  8 16 
 4  8 16 32 
 8 16 32 64 
~ $ python3 mat.py 8
    1     2     4     8    16    32    64   128 
    2     4     8    16    32    64   128   256 
    4     8    16    32    64   128   256   512 
    8    16    32    64   128   256   512  1024 
   16    32    64   128   256   512  1024  2048 
   32    64   128   256   512  1024  2048  4096 
   64   128   256   512  1024  2048  4096  8192 
  128   256   512  1024  2048  4096  8192 16384 

Espero ter ajudado :)

  • Vote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.