Anda di halaman 1dari 9

Primeira Lista de Exerccios

Pr-Algoritmos
Enviar a resoluo desta Lista para pjishimaru@gmail.com at o dia 29/04/2015.
- O e-mail deve ter o assunto Lista 1 Pr Algoritmos.
- O aluno dever mandar uma pasta compactada contendo os cdigos de cada questo.
- A resoluo de um nmero desta lista resultar no acrscimo de at 1 ponto na primeira
unidade da disciplina, caso seja atingida determinada quantidade (que no ser divulgada) de
questes corretas.
- Ser considerado tambm raciocnio do aluno na questo, para tal, recomendvel fazer
cdigos legveis e, de preferncia, bem comentados.

Questo 1
A permutao
Descrio
Bob est brincando com nmeros inteiros, ele pega um nmero X e permuta os dgitos desse
nmero criando assim um nmero Y, Bob faz isso vrias vezes at que Y seja o maior possvel.
Por exemplo, se X = 690, Bob poderia criar Y's: {069, 096, 609, 690, 906, 960}; o maior deles
960, ento para X = 690, Bob est interessado no Y = 960.
Sua tarefa criar um programa para ajudar Bob, dado um X, qual o maior Y que Bob consegue
criar?
Entrada
A primeira linha da entrada contm T, o nmero de casos de teste.
Cada caso de teste consiste de uma linha contendo o inteiro X.
Limites:
1 <= T <= 50
0 <= X <= 10^(10^5)
Sada
Para cada caso de teste imprima em uma nica linha
Caso A: Y
onde A o nmero do caso atual, comeando em 1, e Y o maior nmero que Bob consegue
formar fazendo uma permutao de X.

Questo 2

O teclado
Descrio
Bob comprou um computador novo, porm ele no est muito acostumado com o teclado e s
vezes demora bastante para digitar algumas palavras.
Bob escolheu N palavras distintas de um dicionrio, as chamou de W1, W2, ..., WN e percebeu
que demorava Xi milissegundos para escrever a i-sima delas, ou seja, demorava Xi
milissegundos para escrever Wi.
Agora, ele quer um programa que dados essas N palavras, junto com o tempo gasto, em
milissegundos, para escrever cada uma delas, e um texto S composto por M dessas palavras
(possivelmente com repetio), diga quanto tempo, tambm em milissegundos, ele ir demorar
para escrever o texto.
Voc pode ajud-lo?
Entrada:
A primeira linha da entrada contm T, o nmero de casos de teste.
Cada caso de teste consiste de vrias linhas, na forma:
N
W1 X1
W2 X2
W3 X3
...
WN XN
M
S
onde
N a quantidade de palavras que Bob calculou o tempo que ele demora para escrever
Wi representa a i-sima palavra do dicionrio
Xi representa quanto tempo Bob demora para escrever Wi
M a quantidade de palavras do texto S
S o texto que Bob quer saber quanto tempo vai demorar para escrever com seu teclado novo
Limites:
1 <= T <= 50
1 <= N <= 50
1 <= |Wi| <= 20, para i=1,...,N
1 <= Xi <= 5000, para i=1,...,N
1 <= M <= 100
Cada palavra da entrada contm apenas letras [a-z] minsculas. As palavras do texto S so
mostradas em uma nica linha e cada palavra separada por exatamente um espao.
Sada
Para cada caso de teste imprima em uma nica linha
Caso X: Y
onde X o nmero do caso atual, comeando em 1, e Y a quanto tempo Bob vai demorar para
escrever o texto, em milissegundos.

Questo 3
Escreva um algoritmo que leia um inteiro N (0 N 15), correspondente a ordem de uma
matriz M de inteiros, e construa a matriz de acordo com o exemplo abaixo.
Entrada
A entrada consiste de vrios inteiros, um valor por linha, correspondentes as ordens das matrizes
a serem construdas. O final da entrada marcado por um valor de ordem igual a zero (0).
Sada
Para cada inteiro da entrada imprima a matriz correspondente, de acordo com o exemplo. Os
valores das matrizes devem ser formatados em um campo de tamanho T justificados direita e
separados por espao, onde T igual ao nmero de dgitos do maior nmero da matriz. Aps o
ltimo caractere de cada linha da matriz no deve haver espaos em branco. Aps a impresso
de cada matriz deve ser deixada uma linha em branco.
EXEMPLO DE ENTRADA
1
2
3
4
5
0
EXEMPLO DE SADA
1
12
24
1 2 4
2 4 8
4 8 16
1 2 4 8
2 4 8 16
4 8 16 32
8 16 32 64
1
2
4
8
16

2
4
8
16
32

4 8 16
8 16 32
16 32 64
32 64 128
64 128 256

Questo 4
Criar um programa que determina quais nmeros de uma sequncia pertencem sequncia
Fibonacci.
Entrada:
Uma sequncia de N nmeros inteiros.
Ex:
19
3
4
7
34
Sada:
Os elementos da sequncia que pertencem sequncia Fibonacci
3
34
*O quo menos custoso for seu algoritmo, melhor ser a nota nesta questo.
** Pesquise um pouco a respeito das propriedades da sequncia Fibonacci.
Questo 5
As pirmides do Egito
At hoje no se sabe como as famosas pirmides do Egito foram contruidas, mas essas
aqui sero bem fceis para vocs. A princpio ser dado um inteiro N que determinar quantas
pirmides sero feitas e em seguida sero dados um int T e uma String S onde T determina a
altura da pirmide e S determina se a pirmide ser impressa de cabea para baixo ou no (A a
pirmide fica normal e B de cabea para baixo).
Entradas:
- N (100 >= N > 0).
- T (100 >= T > 0).
- S ('A' ou 'B').
Exemplo:
Entrada:
4
4A
5B
3B
3A

Sada:
X
XXX
XXXXX
XXXXXXX
XXXXXXXXX
XXXXXXX
XXXXX
XXX
X
XXXXX
XXX
X
X
XXX
XXXXX
OBS: No h espaos depos do ltimo X de cada linha e sempre deixe um espao entre cada
pirmide
Questo 6
Dada um array de inteiros sua tarefa consiste em encontrar a soma mxima que um subarray
continuo fornece;
Exemplo: Seja o array (-1, 2, 3, -10, 7, -5, 1, 5) a soma mxima que um subarray fornece (7 +
(-5) + 1 + 5) = 8.
Vo existir T (1<=T<=10) casos de teste. Cada array vai possuir tamanho N (1<=N<=1000000).
Seu algoritmo deve possuir uma "boa" complexidade de tempo (digamos O(n)).
Formato de entrada:
A primeira linha vai possuir o valor de T. A T prximas linhas vo possuir os casos de teste.
Cada caso de teste formado pelo numero N no inicio seguido de N nmeros que representam o
array.
Formato de saida:
Para cada caso de teste imprima uma linha contendo o valor mximo que um subarray fornece.
Exemplo de entrada:
2
3 2 -2 10
8 -1 2 3 -10 7 -5 1 5
Exemplo de sada:
10
8

Questo 7
Dada uma matriz de inteiros suas tarefa consiste em encontrar a soma mxima que uma
submatriz fornece.
Vo existir T (1<=T<=10) casos de teste. Cada matriz vai possuir tamanho N (1<=N<=100)
linhas e M (1<=M<=100) colunas.
Seu algoritmo no precisa ter uma "boa" complexidade de tempo, mas faa o seu melhor :D.
Formato de entrada:
A primeira linha vai possuir o valor de T. As prximas linhas vo possuir os casos de teste.
Cada caso de teste formado por dois inteiros N (nmero de linhas) M (nmero de colunas)
seguido de N linhas com M inteiros cada.
Formato de sada:
Para cada caso de teste imprima uma linha contendo o valor mximo que uma submatriz
fornece.
Exemplo de entrada:
2
34
-10 -3 3 0
2 0 -10 1
10 3 -4 7
34
-10 -3 3 0
2 0 -10 1
10 3 -4 7
Exemplo de sada:
16
16
Questo 8
Considere um array de tamanho N em que seu contedo uma permutao dos inteiros 1,
2, ..,N.
Implemente uma funo que ordene esse array em O(n).
Dicas:
1.Lembre-se que o numero 1 deve ficar em array[0], o 2 em array[1], e o N em
array[N-1].
2.Para que seja O(n), o array deve ser percorrido apenas uma vez e se um elemento estiver na
posio errada, as trocas necessrias devem ser efetuadas.

Questo 9
Efetue o clculo do MDC entre dois nmeros em O(log n)
Exemplo de Entrada:
15 5
Exemplo de Sada:
5
* Existem duas linhas bsicas de raciocnio para responder esta questo, uma custosa e outra
mais eficiente.
Questo 10
Voc tem como entrada uma sequncia de n inteiros (1 <= n <= 100000). Sua tarefa escrever
um programa que encontre o menor inteiro positivo que no se encontra nesse array, em tempo
O(n).
Exemplo:
Entrada
-83 123 91 28 1 239 2 -12423 8392 3 5 123812
Sada
4
Questo 11
Numbers, numbers, numbers
Joo estava com bastante tempo livre, e como gosta bastante de matemtica, decidiu passar o
tempo da seguinte forma: ele escolhia um conjunto de nmeros distintos e, a partir da, escrevia
todos os subconjuntos disjuntos possveis com 5 elementos. O problema, no entanto, que ele
passou a se perder na sua brincadeira. Voc, ento, deve desenvolver um algoritmo para auxililo.
Entrada
Consiste de um ou mais casos de teste.
A primeira linha um inteiro N, tal que 5 <= N <= 10, indicando o nmero de elementos do
conjunto. Na linha seguinte, sero dados N nmeros, separados por espaos, j em ordem
crescente.
N = 0 indica fim de programa e no deve ser processado.

Saida
Para cada caso, imprima todos os possveis subconjuntos distintos, com os nmeros separados
por um espao, sendo um subconjunto por linha. Na impresso, os elementos de cada
subconjunto tem de estar ordenados. Alm disso, os subconjuntos tambm devem estar
ordenados.
* Imprima uma linha em branco aps cada caso.
Input
6
2 4 6 8 10 12
7
2 3 4 5 10 20 50
0
Output
2 4 6 8 10
2 4 6 8 12
2 4 6 10 12
2 4 8 10 12
2 6 8 10 12
4 6 8 10 12
2 3 4 5 10
2 3 4 5 20
2 3 4 5 50
2 3 4 10 20
2 3 4 10 50
2 3 4 20 50
2 3 5 10 20
2 3 5 10 50
2 3 5 20 50
2 3 10 20 50
2 4 5 10 20
2 4 5 10 50
2 4 5 20 50
2 4 10 20 50
2 5 10 20 50
3 4 5 10 20
3 4 5 10 50
3 4 5 20 50
3 4 10 20 50
3 5 10 20 50
4 5 10 20 50

Questo 12
Os zeros do fatorial
dado um inteiro N, crie um codigo que calcule a quantidade de zeros a direita que o fatorial
desse N ir ter, sem calcular o fatorial desse numero.
Ex.:
N = 12
fat(12) = 479001600
quantidade de zeros a direita = 2
N=7
fat(7) = 5040
quantidade de zeros a direita = 1;
N=4
fat(4) = 24
quantidade de zeros a direita = 0;
Questo 13
Relgio
Bem, Joo no era o nico com tempo livre. Priscila tambm. Ela possui um relgio analgico
circular na parede de seu quarto e fez as seguintes constataes:
- O relgio tem 60 marcas igualmente espaadas.
- A cada minuto, o ponteiro mais longo se move prxima marca, no sentido horrio.
- A cada hora, o ponteiro mais curto se move 5 marcas, no sentido horrio.
- Os ponteiros no ficam entre marcas.
A partir da, Priscila passou a calcular o maior angulo entre os ponteiros em certos instantes, e
observou que certos ngulos no eram possveis.
Voc, agora, para ajud-la, deve escrever um algoritmo que, dado um numero inteiro N, retorna
se possvel obt-lo como ngulo (maior).
Caso seja possvel, imprima: possvel obter N.
Caso no, imprima: No possvel obter N.
O programa termina com a entrada -1, que no deve ser processada.
Limites:
180 <= N <= 360

Anda mungkin juga menyukai