Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #58 da revista programar. Faz já o download aqui!

Gabaum

Resolução URI - 1557

Mensagens Recomendadas

Gabaum    0
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++

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pwseo    225
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 :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade