Dizemos que um número inteiro positivo é triangular se ele é o produto de três numeros inteiros consecutivos. Por exemplo, 120 é triangular, pois 4 * 5 * 6 = 120
.
Dado um número inteiro positivo n, verificar se n é triangular.
Obs.: Esse exercício corresponde ao 10 da lista sobre inteiros .
def main():
'''
Programa que le um inteiro positivo n e imprime uma mensagem
indicando se ele eh ou nao triangular.
'''
print("Determina se um número n é triangular\n")
# leia o valor de n
n = int(input("Digite o valor de n: "))
i = 1
while i * (i+1) * (i+2) < n:
i = i + 1
if i * (i+1) * (i+2) == n:
print("%d é o produto %d*%d*%d" %(n,i,i+1,i+2))
else:
print("%d nao é triangular" %(n))
#--------------------
main()
Dado um número natural na base binária, transformá-lo para a base decimal.
Exemplo:
Dado 10010, a saída será 18, pois 1 × 2^4 + 0 × 2^3 + 0 × 2^2 + 1 × 2^1 + 0 × 2^0 = 18.
Obs.: Esse exercício corresponde ao exercício 16 da lista de exercícios sobre inteiros.
def main():
n = n_binario = int(input("Digite o número na base binária: "))
n_decimal = 0
pot2 = 1
while n > 0:
digito_binario = n % 10
n = n // 10
n_decimal = n_decimal + digito_binario * pot2
pot2 = pot2 * 2
print("O número decimal correspondente ao número binário", n_binario, "é o", n_decimal)
#-------------
main()
Dados números inteiros n
, i
e j
, todos maiores do que zero, imprimir em ordem crescente os n
primeiros naturais que são múltiplos de i
ou de j
e ou de ambos.
Por exemplo, para n = 6
, i = 2
e j = 3
a saída deverá ser:
0 2 3 4 6 8
Obs.: Esse exercício corresponde ao exercício 9 da lista de exercícios sobre inteiros.
def main():
n = int(input("Digite n: "))
i = int(input("Digite i: "))
j = int(input("Digite j: "))
# mutiplos de i e j
mult_i = mult_j = 0
k = 0
while k < n:
if mult_i == mult_j:
print(mult_i)
mult_i = mult_i + i
mult_j = mult_j + j
elif mult_i < mult_j:
print(mult_i)
mult_i = mult_i + i
else:
print(mult_j)
mult_j = mult_j + j;
k += 1
#------------
main()
Dado um número inteiro n>0
, verificar se este número contém dois dígitos adjacentes iguais.
def main():
n = int(input("Digite um número: "))
contem_digitos_iguais = False # Indicador de passagem!!!
d_ant = n % 10
n = n // 10
d = 0
while n > 0 and not contem_digitos_iguais:
# pega o dígito menos significativo do número
d_atual = n % 10
n = n // 10
# compara o dígito com o anterior
if d_atual == d_ant:
contem_digitos_iguais = True # Encontramos o que estávamos procurando!!!
# na próxima execução do laço, o digíto atual será o anterior
d_ant = d_atual
if contem_digitos_iguais:
print("Contém números adjacentes iguais")
else:
print("Não contém números adjacentes iguais")
#------------
main()
Dados um número inteiro n>0
e uma sequência com n
números inteiros maiores do que zero, determinar o máximo divisor comum entre eles.
Por exemplo, para a sequência
3
42 30 105
o seu programa deve escrever o número 3.
Obs.: Este problema corresponde ao exercício 7 da lista de exercícios repetições encaixadas.
def main():
n = int(input("Digite a quantidade de números da sequência: "))
novo_mdc = mdc = int(input("Digite um número da sequência: "))
for cont in range(1,n): # o laço será executado exatamente n-1 vezes!
num = int(input("Digite um número da sequência: "))
divisor = 1
while divisor <= mdc and divisor <= num:
if mdc % divisor == 0 and num % divisor == 0:
novo_mdc = divisor
divisor += 1
mdc = novo_mdc
print("O MDC dos numeros é ", mdc)
#-----------
main()
A Solução 1 usa a igualdade mdc(a,b,c) == mdc(mdc(a,b),c).
Em cada iteração, o mdc de dois números, digamos num1 e num2, é encontrado examinando-se os números 1, 2, 3, ..., min(num1,num2) nessa ordem.
def main():
n = int(input("Digite a quantidade de números da sequência: "))
mdc = int(input("Digite um número da sequência: "))
for cont in range(1,n): # o laço será executado exatamente n-1 vezes!
num = int(input("Digite um número da sequência: "))
divisor = mdc
while mdc % divisor != 0 or num % divisor != 0:
divisor = divisor - 1
mdc = divisor
print("O MDC dos numeros é ", mdc)
#-----------
main()
A Solução 2 também usa a igualdade mdc(a,b,c) == mdc(mdc(a,b),c).
Entretanto, em cada iteração o mdc de dois números, digamos num1 e num2, é encontrado examinando-se os números num1, num1-1, num1-2, ..., 2, 1 nessa ordem.
def main():
n = int(input("Digite a quantidade de números da sequência: "))
mdc = int(input("Digite um número da sequência: "))
for cont in range(1,n): # o laço será executado exatamente n-1 vezes!
num = int(input("Digite um número da sequência: "))
if mdc < num:
divisor = mdc
else:
divisor = num
while mdc % divisor != 0 or num % divisor != 0:
divisor = divisor - 1
mdc = divisor
print("O MDC dos numeros é ", mdc)
#-----------
main()
def main():
n = int(input("Digite a quantidade de números da sequência: "))
mdc_sequencia = int(input("Digite um número da sequência: "))
for cont in range(1,n): # o laço será executado exatamente n-1 vezes!
num = int(input("Digite um número da sequência: "))
mdc_sequencia = mdc(mdc_sequencia, num)
print("O MDC dos numeros da sequência é ", mdc_sequencia)
#-------------------------------------------------
def mdc(a,b):
''' (int, int) -> int
Função que calculda o máximo divisor comum (MDC) de a e b usando o algoritmo de Euclides,
ou seja, usando a seguinte propriedade do MDC:
MDC(a,b) = MDC(b,r), onde r é o resto da divisão inteira de a por b.
'''
while b != 0:
r = a % b
a = b
b = r
return a
#-------------------------------------------------
main()
Na figura, no plano cartesiano, a região sombreada não inclui as linhas de bordo. Note que o eixo y cai bem no meio da figura, e usamos o lado do quadrado para indicar as ordenadas correspondentes.
Escreva um programa que lê as coordenadas cartesianas (x, y)
de um ponto, ambas do tipo float
e imprime dentro se esse ponto está na região, e fora caso contrário.
Obs.: Baseada na questão 1 da Prova 1 de 2014.
def main():
x = float(input("Digite x: "))
y = float(input("Digite y: "))
# suponha que (x,y) esta dentro
dentro = True
if x <= -5 or 5 <= x or y <= 0 or 8 <= y:
# aqui sabemos que (x,y) esta fora da face
dentro = False
elif -3 <= x <= 3 and 1 <= y <= 2:
# aqui sabemos que (x,y) esta na boca
dentro = False
elif -4 <= x <= -1 and 4 <= y <= 7:
# aqui sabemos que (x,y) esta no olho esquerdo
dentro = False
if -3 < x < -2 and 5 < y < 6:
# aqui sabemos que na verdade (x,y) esta na iris esquerda
dentro = True
elif 1 <= x <= 4 and 4 <= y <= 7:
# aqui sabemos que (x,y) esta no olho direito
dentro = False
if 2 < x < 3 and 5 < y < 6:
# aqui sabemos que na verdade (x,y) esta na iris direita
dentro = True
if dentro:
print("dentro")
else:
print("fora")
#------------------
main()
Observe que, na solução 1, nós começamos supondo que o ponto está dentro (pois a variável indicadora de passagem dentro
começa com o valor False
) e depois fazemos as verificações necessárias para confirmar essa suposição. Uma solução alternativa igualmente válida seria começar supondo que o ponto está fora e então verificar se isso é verdade ou não.
def main():
x_pos = x = float(input("Digite x: "))
y = float(input("Digite y: "))
if x < 0: # simetria ;-)
x_pos = -x
# suponha que (x,y) que esta dentro
dentro = True
if x_pos >= 5 or y >= 8 or y <= 0:
# aqui sabemos que (x,y) esta fora da face
dentro = False
elif 0 <= x_pos <= 3 and 1 <= y <= 2:
# aqui sabemos que (x,y) esta na boca
dentro = False
elif 1 <= x_pos <= 4 and 4 <= y <= 7:
# aqui sabemos que (x,y) esta em um olho
if not (2 < x < 3 or 5 < y < 6):
# aqui sabemos que (x,y) esta fora da iris
dentro = False
if dentro:
print("dentro")
else:
print("fora")
#-------------
main()
Revisão