Apostila Exercicios Obi Ucdb
Apostila Exercicios Obi Ucdb
Apostila Exercicios Obi Ucdb
Edison Thomaz
Hilda Alves
Luciano Gonda
Priscila Martins
Ricardo Santos
Engenharia de Computac
ao/UCDB - Campo Grande-MS
Junho/2009
Captulo 1
Lista de Exerccios - L
ogica
Esta lista de exerccios e composta por exerccios teoricos que abordam racioncnio
logico.
1. Tres m
usicos, Joao, Antonio e Francisco, tocam harpa, violino e piano. Contudo, nao
se sabe quem toca o que. Sabe-se que o Antonio nao e o pianista. Mas o pianista
ensaia sozinho na Terca . O Joao ensaia com o Violoncelista a`s Quintas. Quem toca o
que?
2. Quantas rainhas sao necessarias e em que posicoes devem estar localizadas para que
todas as casas desocupadas de um tabuleiro de xadrez fiquem atacadas por uma das
rainhas?
3. Temos 32 golfistas que vao jogar individualmente um torneio em N semanas. Pretendese que cada jogador so jogue uma vez um contra o outro. Sabendo que ocorre apenas
1 jogo por semana, qual o n
umero mnimo de semanas antes de haver repeticoes?
4. No antigo Egito, havia um prisioneiro numa cela com duas sadas, cada uma delas
com um guarda. Cada sada dava para um corredor diferente em que um dava para
o campo e, portanto, para a liberdade e o outro para um fosso de crocodilos. So os
guardas sabiam qual a sada certa, mas um deles dizia sempre a verdade e outro mentia
sempre. O prisioneiro nao sabia nem qual a sada certa nem qual o guarda verdadeiro.
Qual a pergunta (e uma so pergunta) que o prisioneiro deveria fazer a um dos guardas
ao acaso, para saber qual a porta certa?
5. Tres pessoas se registram em um hotel. Elas pagam R$30,00 ao gerente e vao para
seus quartos. O gerente nota que a diaria e de R$25,00 e entrega R$5,00 ao mensageiro
do hotel para ele devolver aos hospedes. No caminho, o mensageiro conclui que seria
complicado dividir R$5,00 entre 3 pessoas, entao ele embolsa R$2,00 e entrega R$1,00
para cada pessoa. Agora, cada um pagou R$10,00 e pegou R$1,00 de volta. Entao,
cada um pagou R$9,00, totalizando R$27,00. O mensageiro tem R$2, totalizando R$29.
Onde esta o outro R$1,00?
1
6. Sao dados N azulejos de dimensoes 10cm x 10cm. Com eles, voce deve montar um
conjunto de quadrados (com espessura de um azulejo) de modo a utilizar TODOS
os azulejos dados. Inicialmente voce deve montar o maior quadrado possvel com
os azulejos dados; entao, com os azulejos que sobraram, voce deve montar o maior
quadrado possvel, e assim sucessivamente. Por exemplo, se forem dados 31 azulejos,
o conjunto montado tera quatro quadrados, conforme ilustra a Figura 1.1:
10. Em uma certa comunidade, todos os nativos sempre mentem e os visitantes sempre
falam a verdade. Um estrangeiro encontra-se com tres pessoas e pergunta ao primeiro
se ele e um nativo e recebe uma resposta. O segundo informa entao que o primeiro
falou que ele e um nativo, mas o terceiro afirma que o primeiro e um nativo. Quantas
dessas pessoas sao nativos?
Captulo 2
Lista de Exerccios 2 - Operadores
Aritm
eticos
Esta lista de exerccios e composta por exerccios teoricos e praticos que abordam os
conceitos de tipos de variaveis e a utilizacao de operadores aritmeticos da linguagem C.
1. O que e uma variavel?
2. Quais variaveis a seguir sao aceitas pelo compilador C?
n1
1h
ijk 2
3 jdk
if
Ac5
var inteira
papel-braco
3. Indique a funcao dos operadores aritmeticos a seguir:
(a) :
(b) /:
(c) %:
4. Indique o valor de r apos cada expressao abaixo: (dados: int a = 6; float b = 5.5; int
c = 4; float d = 4.0
(a) r = 5 + a;
(b) r = a * a;
4
(c) r = a / b;
(d) r = a % c;
(e) r = a*b/c;
(f) r = a*(b/c);
(g) r = a*b+(5/a)*(c*b);
5. Construa um programa na linguagem C que receba como entrada dois n
umeros, faca
a soma e a media desses dois n
umeros e exiba somente a media.
6. Construa um programa na linguagem C que receba um n
umero n e imprima o valor
correspondente ao seu quadrado (n2 ).
7. Construa um programa na linguagem C que receba como entrada o peso e a altura de
uma pessoa e calcule o seu IMC. O IMC e dado pela formula:
IM C =
peso
altura2
(F 32)5
9
14. Construa um programa que receba o preco de custo de um produto e calcule o preco
final do mesmo sabendo:
5
O preco final e calculado atraves da soma do preco de custo, o valor dos impostos
e o lucro esperado.
O valor dos impostos e de 45% do valor do preco de custo.
O lucro esperado e de 50% do valor do preco de custo.
15. Construa um programa que calcule o gasto de uma viagem de carro de uma cidade a
outra, sabendo:
O carro utilizado roda 15 KM com 1 litro de gasolina.
O preco da gasolina e de R$2,60.
O valor de cada pegagio e de R$8,00.
Seu programa deve receber a distancia e a quantidade de pedagios entre as cidades.
16. Construa um programa que recebe como entrada a altura(h) e o sexo da pessoa e
calcule seu peso ideal, utilizando as seguintes expressoes:
homens: 72 h 58
mulheres: 62.1 h 44.7
17. Construa um programa que recebe como entrada a quantidade de latao em Kg e informe
ao usuario a quantidade de cobre e zinco presente no mesmo, sabendo que o latao e
feito de 70% de cobre e de 30% de zinco.
18. Construa um programa que receba o n
umero de lados N de um polgono convexo,
calcule o n
umero de diagonais diferentes (nd ) deste polgono pela formula:
nd =
n(n3)
2
19. Construa um programa que receba o primeiro termo (a1 ) de uma Progressao Aritmetica
(PA), sua razao (r), um n
umero N e, a seguir, calcule e imprima o N -esimo termo da
PA pela formula:
an = a1 + (n 1)r
20. Construa um programa que calcule o valor acumulado de uma poupanca programada.
Seu programa devera receber o valor da constante de aplicacao mensal(P ), a taxa (i)
e n
umero de meses (N ). Utilize a formula:
(1+i)N 1
valor acumulado = P
i
21. Construa um programa que receba dois pontos P 1(x1 , y1 ) e P 2(x2 , y2 ) e calcule e
imprima a distancia entre esses dois pontos pela seguinte formula:
6
d=
(x2 x1 )2 + (y2 y1 )2
22. Construa um programa que receba as dimensoes de uma cozinha (comprimento, altura
e largura) e calcule quantas caixas de azulejos sao necessarias para azulejar todas as
paredes exceto o teto (considere que nao sera descontada a area ocupada por janelas e
portas). Cada caixa de azulejo possui 1, 5m2 .
23. Um sistema de equacoes lineares da forma:
Ax + By = C
Dx + Ey = F
Pode ser resolvido utilizando as seguintes formulas:
x=
CEBF
AF CD
AEBD e y = AEBD
Captulo 3
Lista de Exerccios - Estruturas
Condicionais
Esta lista de exerccios e composta por exerccios teoricos e praticos que abordam os
conceitos de estruturas condicionais e operadores logicos da linguagem C.
1. Determine os resultados logicos das expressoes mencionadas, assinalando se sao verdadeiras ou falsas. Considere para as respostas os seguintes valores: X = 1, A = 3, B
= 5, C = 8 e D = 7.
(a) ( ) (X >= 2)
(b) ( ) n
ao (X > 3)
(c) ( ) (X < 1) e (B >=D)
(d) ( ) (X < 1) e n
ao (B > D)
(e) ( ) (D < 0) ou (C > 5)
(f) ( ) n
ao (D < 0) e (C > 5)
(g) ( ) n
ao (D > 3) ou n
ao (B < 7)
(h) ( ) n
ao (X > 3) ou (C < 7)
(i) ( ) (A > B) ou n
ao (C > B)
(j) ( ) (A > B) ou (C > B)
2. Construa um programa que leia um n
umero N e informe se o mesmo e par ou impar.
3. Construa um programa que leia duas notas de um aluno, calcule a media e informe se
ele foi Aprovado ou Reprovado sabendo que a media do colegio e 6,0.
4. Construa um programa que leia um smbolo de operacao do usuario (+, , / ou ) e
dois n
umeros reais. O programa deve retornar o resultado da operacao recebida sobre
esses dois n
umeros.
8
Grau
F
E
D
C
B
A
Conceito
A
B
C
D
E
20. Construa um programa que leia a hora de incio de um jogo e a hora do final do jogo
(considerando horas e minutos inteiros) e calcula a duracao do jogo em horas, sabendose que o tempo maximo de duracao do jogo e de 24 horas e que o jogo pode iniciar em
um dia e terminar no dia seguinte.
21. A Secretaria de Meio Ambiente controla o ndice de poluicao e mantem 3 grupos
de ind
ustrias que sao altamente poluentes do meio ambiente. O ndice de poluicao
aceitavel varia de 0,05 ate 0,29. Se o ndice sobe para 0,3 as ind
ustrias do 1o grupo sao
intimadas a suspenderem suas atividades, se o ndice crescer para 0,4 as ind
ustrias do
1o e 2o grupo sao intimadas a suspenderem suas atividades, se o ndice atingir 0,5 todos
os grupos devem ser notificados a paralisarem suas atividades. Faca um programa que
leia o ndice de poluicao medido e emita a notificacao adequada aos diferentes grupos
de empresas.
22. Nos u
ltimos dias, o governo brasileiro resolveu aumentar a taxa de juros anual para
26%. Isso fez com que a associacao de donas de casa de Campo Grande-MS ficasse
preocupada com o preco de produtos utilizados no dia-a-dia. Dessa forma, a associacao
dividiu seus integrantes em diversas equipes para fazer consulta de precos. Dona Ofelia,
uma das associadas, ficou responsavel pela consulta de precos de arroz, oleo de soja
e cenoura nos supermercados Xilimlim e Tabajara. Como possui um conhecimento
do uso do computador, ela decidiu utiliza-lo para realizar os calculos dos precos. Sua
tarefa e ajuda-la e desenvolver um programa que leia os precos dos tres produtos em
ambos os supermercados. Em seguida, o programa deve determinar qual a soma dos
precos de todos os produtos em cada um dos supermercados. Por fim, seu programa
deve informar qual o melhor supermercado para comprar os tres produtos juntos.
23. Construa um programa que leia tres n
umeros representando o dia, o mes e o ano de
uma data (o ano deve ter 4 dgitos). Em seguida, seu programa deve verificar se a data
e valida. Obs.: Lembre-se que um ano e bissexto quando e m
ultiplo de 4, mas nao e
m
ultiplo de 100, com excecao dos anos m
ultiplos de 400.
24. Uma empresa paga a seus funcionarios R$ 1,00 de comissao para cada produto vendido,
entretanto, se forem vendidos mais de 250 produtos, o valor aumenta para R$ 1,50.
Se a quantidade for superior a 500 produtos, o valor da comissao sobe para R$ 2,00.
Construa um programa que leia o nome de um funcionario e a quantidade de produtos
que ele vendeu. Exiba o nome do funcionario e o total de comissao que ele vai receber.
25. Uma cidade e classificada de acordo com o ndice de poluicao da seguinte forma: ndice
de poluicao menor que 35 como agradavel; de 35 ate 60 desagradavel, e acima de 60
perigoso. Joaozinho e extremamente alergico a` poluicao, por isso, precisa se mudar
para uma cidade menos poluda possvel. Alem disso, ele tambem nao gosta de cidades
11
muito populosas. Construa um programa que leia o nvel de poluicao de uma cidade e
quantidade de habitantes. Apos a leitura, classifique a cidade da seguinte forma:
Boa: somente se o nvel de poluicao for menor que 35 e a cidade tiver menos que
20.000 habitantes.
Razoavel: se o nvel de poluicao for agradavel ou desagradavel e o n
umero de
habitantes for menor que 20.000.
Ruim: se o nvel for desagradavel ou ruim e o n
umero de habitantes for maior que
40.000.
Pessima: se o nvel de poluicao for maior que 60 e o n
umero de habitantes for
maior que 100.000.
26. Uma empresa concedera um aumento de salario aos seus funcionarios, variavel de
acordo com o cargo, conforme a Tabela 3.3. Construa um programa que leia o salario
e o cargo de um funcionario e calcule o novo salario. Se o cargo do funcionario nao
estiver na tabela, ele devera, entao, receber 40% de aumento. Mostre o salario antigo,
o novo salario e a diferenca.
C
odigo
101
102
103
Cargo
Gerente
Engenheiro
Tecnico
Percentual
30%
20%
10%
Cr
edito
20% do valor do saldo medio
30% do valor do saldo medio
40% do valor do saldo medio
12
Captulo 4
Lista de Exerccios - Estruturas de
Repeti
c
ao
4 Esta lista de exerccios e composta por exerccios teoricos e praticos que abordam
os conceitos de estruturas de repeticao da linguagem C.
1. Construa um programa que leia dois n
umeros inteiros I e F , gere e imprima os n
umeros
mpares dentro do intervalo [I, F ]. Primeiro verifique qual e o maior.
2. Construa um progama que leia n n
umeros inteiros ate que o usuario digite 0. Em
seguida, seu programa deve informar a media dos n
umeros lidos.
3. Construa um programa que leia um n
umero n e informe se ele e primo ou nao.
4. Jose tem 1,50 m e cresce 2 centmetros por ano. Pedro tem 1,10 m e cresce 3 centmetros
por ano. Construa um programa que calcule em quantos anos Pedro sera maior que
Jose.
5. Construa um programa que leia dois n
umeros inteiros e informa se um n
umero e
permutacao do outro. Exemplo: 432 e permutacao de 234, 1121 e permutacao de
1211.
6. Construa um programa que leia um n
umero inteiro e exiba o maior n
umero primo que
seja menor do que o n
umero digitado.
7. Construa um programa que imprima a tabuada dos n
umero de 1 a 10.
8. Construa um programa que leia um n
umero n, em seguida leia uma sequencia de n
n
umeros inteiros e verifica se a sequencia esta ordenada Crescentemente, Decrescentemente ou esta desordenada. Exemplo:
A sequencia 1,4,5,7,12,54,78 esta ordenada crescentemente.
13
2
n1
3
n2
+ ... n1
10. Um Pet Shop deseja calcular o custo de criacao de porquinhos da India. O custo e
encontrado pela formula:
Custo = (H 0, 8)/2 + 10
onde H e o n
umero de porquinhos da India e Custo e custo em dolar para se criar
os porquinhos. Construir um programa que leia sucessivos valores de H e calcule
os respectivos custos. O programa deve parar quando um valor negativo de H for
fornecido.
11. A UCDB realizou uma pesquisa sobre algumas caractersticas fsicas de seus alunos, e
necessita de um programa que tabule e informe:
qual a maior idade entre os alunos;
qual a menor idade entre alunos;
o total de alunos do sexo masculino;
o total de alunos do sexo feminino.
As respostas foram codificadas da seguinte maneira:
Idade: valor numerico indicando o n
umero de anos de vida;
Sexo: M para masculino e F para feminino;
Obs.: O programa dever terminar quando o usuario digitar s(sim) em uma pergunta
se deseja continuar ou nao.
12. A empresa Unidos & Cansados Ltda., realizou uma pesquisa sobre a aceitacao de seu
produto alimentcio e necessita de um programa que tabule e informe:
quantas mulheres maiores de 40 anos indicaram o produto como bom;
quantas mulheres maiores de 50 anos indicaram o produto como ruim;
quantos homens indicaram o produto como pessimo;
total de homens que participaram da pesquisa.
total de mulheres participaram da pesquisa.
As respostas foram codificadas da seguinte maneira:
Idade: valor numerico indicando o numero de anos de vida;
Sexo e M para homens e F para mulheres;
Opiniao com relacao ao produto: 1-pessimo 2-ruim 3-regular 4-bom 5-otimo.
Obs.: O programa dever terminar quando o usuario digitar s (sim).
14
13 = 1,
23 = 3 + 5,
33 = 7 + 9 + 11,
43 = 13 + 15 + 17 + 19,
...
Construa um programa que dado n, determine os mpares consecutivos cuja soma e
igual a n3 para n assumindo valores de 1 a n.
20. Para realizar a totalizacao dos votos de uma eleicao para um cargo majoritario com
3 candidatos, leia os votos de cada secao ate que seja digitado o n
umero da secao 0
(zero). Para cada secao sao informados o n
umero de votos do candidato A, B, C, o
n
umero de votos brancos e nulos. Entao determine:
(a) O n
umero de votantes
(b) O total de votos de cada candidato
(c) O total de votos brancos e de votos nulos
(d) O total de votos validos
(e) O candidato com maior votacao
(f) Se a eleicao foi valida. Para isso o total de votos brancos mais votos nulos deve
ser menor que o total de votos validos
(g) Se havera segundo turno. Para nao haver segundo turno basta que o total de
votos do candidato vencedor seja maior que 50% dos votos validos.
21. Construa um programa que leia um n
umero inteiro positivo n, verifica e informa se o
mesmo e perfeito ou nao. Dizemos que n e perfeito se for igual a` soma de seus divisores
positivos diferentes de n. Exemplo:
28 e perfeito, pois 1 + 2 + 4 + 7 + 14 = 28
22. Construa um programa que leia um n
umero inteiro na base decimal e determine o seu
equivalente na base binaria. O resultado sera um n
umero inteiro que representa um
n
umero binario.
23. Construa um programa que leia um n
umero inteiro positivo n e imprime o mesmo na
ordem inversa. Exemplo:
Dado 26578 a sada devera ser 87562.
24. Qualquer n
umero natural de quatro algarismos pode ser dividido em duas dezenas
formadas pelos seus dois primeiros e dois u
ltimos dgitos. Exemplos:
16
1297: 12 e 97.
5314: 53 e 14.
Construa um programa que imprima todos os n
umeros de quatro algarismos cuja raiz
quadrada seja a soma das dezenas formadas pela divisao acima. Exemplo:
9801 = 99 = 98 + 01.
Portanto, 9801 e um dos n
umeros a ser impresso.
25. Construa um programa que leia um n
umero natural, verifica e informa se o mesmo e
palndrome ou nao. Dizemos que um n
umero natural n com pelo menos 2 algarismos
e palndrome se o primeiro algarismo de n e igual ao seu ultimo algarismo; o segundo
algarismo de n e igual ao pen
ultimo algarismo; e assim sucessivamente. Exemplos:
567765 e palndrome;
32423 e palndrome;
567675 nao e palndrome.
17
Captulo 5
Lista de Exerccios - Vetores
Esta lista de exerccios e composta por exerccios teoricos e praticos que abordam os
conceitos de manipulacao de vetores da Linguagem C.
1. Indique quais das variaveis a seguir representa um vetor de n
umeros reais:
(a) ( ) int A;
(b) ( ) float A[5];
(c) ( ) char A[5];
2. Faca um programa que leia 10 n
umeros e os armazene em um vetor, em seguida,
imprima-os.
3. Faca um programa que leia 5 n
umeros inteiros, armazene-os em um vetor e em seguida
conte quantos elementos sao negativos e informe ao usuario. Por fim, imprima todos
os elementos do vetor.
4. Faca um programa que leia dois vetores de 12 elementos e em seguida calcule a soma
dos vetores, elemento a elemento, e armazene em um terceiro vetor.
5. Leia um vetor de 10 elementos e em seguida encontre a posicao do elemento x (dado
pelo usuario) no vetor. Caso o elemento nao exista no vetor informe ao usuario.
6. Escreva um programa que faz a leitura do vetor A[20] de inteiros apenas com valores
distintos, ou seja, valores diferentes. Caso o usuario insira um inteiro ja existente, o
programa deve alertar a duplicidade.
7. Leia um vetor com 20 elementos. A seguir, troque o primeiro elemento com o u
ltimo,
o segundo com o pen
ultimo, etc, ate o decimo com o primeiro.
8. Faca um programa que leia um vetor de n elementos inteiros, calcule e mostre:
(a) A quantidade de n
umeros pares;
18
(b) Quais os n
umeros pares;
(c) A quantidade de n
umeros mpares;
(d) Quais os n
umeros mpares.
9. Dado um vetor de n elementos, faca um programa que leia um n
umero inteiro x e
remova-o do vetor. Se houver mais de uma ocorrencia, seu programa deve remover
todas as ocorrencias. Se o elemento nao estiver presente, imprima uma mensagem
informando que o elemento nao existe.
10. Dado um vetor de n elementos inteiros, calcule a media dos elementos.
11. Incremente o exerccio anterior de forma que seu programa imprima em uma linha os
elementos que estao abaixo da media e em outra os que estao acima da media.
12. Escreva um algoritmo que leia o vetor K [20] de inteiros e escreva 2 vetores V e Q.
V deve conter os elementos distintos de K.
Q deve conter a quantidade de vezes que cada valor de V ocorre em K.
13. Escreva um algoritmo que leia um vetor X [20] de reais e retorna o seu maior e o seu
menor valor.
14. Idem ao exerccio anterior. Imprima a posicao do maior e do menor elemento do vetor
X.
15. Escreva um algoritmo que leia um vetor X [30] e retorne um vetor K, cujos elementos
sao os valores de X multiplicados pelo seu ndice.
16. Uma escola deseja saber se existem alunos cursando, simultaneamente, as disciplinas de
Algoritmos e Logica de Programacao. Coloque os n
umeros das matrculas dos alunos
que cursam Algoritmos em um vetor, no maximo de quinze alunos. Coloque os n
umeros
das matrculas dos alunos que cursam Linguagem de Programacao em outro vetor, no
maximo dez alunos. Mostre o n
umero da matrcula dos alunos que estao matriculados
nas duas disciplinas.
17. Faca um programa que receba o nome de n produtos e seus respectivos precos, calcule
e mostre:
(a) A quantidade de produtos com preco inferior a R$ 50,00.
(b) O nome dos produtos com preco entre R$ 50,00 e R$ 100,00.
(c) A media dos precos dos produtos com precos superior a R$ 100,00.
18. Faca a leitura de 15 n
umeros e armazene-os em um vetor. Depois gere dois vetores: um
com os n
umeros em ordem crescente e outro com os n
umeros em ordem decrescente.
Por fim, mostre o conte
udo desses dois vetores.
19
19. Um vendedor precisa de um programa que leia o valor das vendas mensais e mostre
quais as tres maiores vendas e os dias que as mesmas foram realizadas. Imprima o
valor das vendas ordenadas de forma crescente pela data.
20. Faca um programa que leia dois vetores de 10 elementos numericos cada um e mostre
um vetor resultante da intercalacao desses dois vetores.
Exemplo:
V1: 1, 9, 8, 7, 6, 5, 3, 4, 2, 0;
V2: 0, 1, 2, 3, 5, 6, 4, 7, 9, 8;
Resultante: 1, 0, 9, 1, 8, 2, 7, 3, 6, 5, 5, 6, 3, 4, 4, 7, 2, 9, 0, 8;
21. Suponha que a Tabela 5.1 represente a memoria do computador no momento da
execucao de um algoritmo.
teste
teste
teste
teste
teste
[4] 4
[3] 6
[2] 8
[1] 9
[0] 11
i 1
j 10
(b) Considerando a memoria apresentada na Tabela 5.1, como ficaria a memoria apos
a execucao do seguinte trecho de codigo?
i = 0;
while(i < 5)
{
teste[i] = teste[i] * j;
i = i + 1;
}
20
(c) Considerando a memoria apresentada na Tabela 1.1, como ficaria a memoria apos
a execucao do seguinte trecho de codigo?
for(i = 0; i < 5; i++)
{
teste[i] = teste[i] * j;
i = i + 1;
}
22. Professor Mario anda muito a tarefado e por isso esta sem tempo para corrigir provas.
Voce e um de seus alunos. Como o professor sabe que voce possui conhecimento em
programacao de computadores, pediu sua ajuda. Ele quer que voce faca um programa
para corrigir provas de m
ultipla escolha. Cada prova tem 10 questoes e cada questao
vale 1 ponto. O primeiro conjunto de dados a ser lido e o gabarito da prova. Os outros
dados serao os n
umeros dos alunos e suas respectivas respostas. Existem 5 alunos
matriculados. Calcule e mostre:
(a) O n
umero e a nota de cada aluno.
(b) A percentagem de aprovacao, sabendo-se que a nota mnima e 6,0.
23. Em uma fabrica trabalham homens e mulheres divididos em tres classes:
Trabalhadores que fazem ate 30 pecas por mes classe 1;
Trabalhadores que fazem de 31 a 35 pecas por mes classe 2;
Trabalhadores que fazem mais de 35 pecas por mes classe 3;
A classe 1 recebe salario mnimo (R$465,00). A classe 2 recebe salario mnimo mais 3%
do salario mnimo por cada peca acima das 31 pecas iniciais. A classe 3 recebe salario
mnimo mais 5% do salario mnimo por cada peca fabricada acima das 35 pecas iniciais.
A fabrica possui 15 operarios. Faca um programa que leia, para cada operario: o seu
n
umero (inteiro), o n
umero de pecas fabricadas no mes e seu sexo (1 para masculino
ou 2 para feminino). Os dados devem ser armazenados em 3 vetores: vet num op,
vet num pecas e vet sexo respectivamente. O programa deve calcular os salarios dos
funcionarios, armazena-los em um quarto vetor (vet salarios) e exibir um relatorio que
contenha o n
umero do operario, a quantidade de pecas fabricadas no mes e o seu
salario. O programa deve mostrar tambem o total da folha de pagamento da fabrica.
24. Faca um programa que leia o preco de compra e o preco de venda de cem mercadorias.
O algoritmo devera imprimir quantas mercadorias proporcionam:
(a) Lucro menor do que 10%.
(b) Lucro entre 10% e 20%.
21
22
Captulo 6
Lista de Exerccios - Vetores de
Strings
Esta lista de exerccios e composta por exerccios teoricos e praticos que abordam os
conceitos de manipulacao de vetores de string da Linguagem C.
1. Faca uma pesquisa sobre as funcoes da biblioteca string.h. Informe o nome, os argumentos de entrada (nome e tipo) e o tipo de retorno. Alem disso, faca um breve resumo
sobre a funcionalidade de cada funcao.
2. Qual valor e retornado na chamada da seguinte funcao:
strcmp(Casa, carro).
3. Qual o tamanho do menor vetor que devemos declarar para armazenar uma cadeia de
caracteres com 10 letras?
4. Faca um programa que leia uma palavra informada pelo usuario em seguida seu
programa deve imprimir o n
umero de caracteres que ha na palavra.
5. Faca um programa que receba uma frase e conte as vogais presentes nesta frase apresentando a seguinte sada:
Exemplo:
Frase: Na proxima quarta-feira e feriado.
a : ****** (6)
e : *** (3)
i : *** (3)
o : ** (2)
u : * (1)
6. Faca um programa para concatenar duas strings que devem ser informadas pelo usuario.
A segunda string deve ser concatenada na primeira. Seu programa deve imprimir
23
tambem o tamanho de cada string. (OBS: Seu programa deve realizar a tarefa acima
citada sem o uso de funcoes da biblioteca string.h)
7. Fazer um programa para ler uma frase e ver quantas vezes um determinado caracter
aparece na frase. Esse caracter deve ser informado pelo usuario.
8. Dadas duas cadeias (uma contendo uma frase e outra contendo uma palavra), determine
o n
umero de vezes que a palavra ocorre na frase. Para exemplificar considere a palavra
ANA e a frase: ANA e MARIANA GOSTAM DE BANANA, a palavra ANA ocorre
4 vezes.
9. Fazer um programa para ler uma string e um caracter. Sempre que o caracter lido
aparecer na frase ele deve ser substitudo por asterisco.
Exemplo:
Frase: o dia esta nublado
Caracter: d
Resultado: o *ia esta nubla*o
10. Fazer um programa para ler uma frase e contar quantas palavras existem na frase.
11. Ao ser fornecido uma frase, uma posicao na frase e uma palavra, insira a palavra na
posicao indicada sem perder o conte
udo da frase.
Exemplo:
Frase: o dia uente
Posicao: 6
Palavra: esta q
Resultado: o dia esta quente
12. Ao serem fornecidas duas cadeias, gerar e exibir a intercalacao das palavras contidas
nas cadeias em uma terceira cadeia.
Exemplo:
Frase1: Em de espeto de
Frase2: casa ferreiro e pau
Frase3: Em casa de ferreiro espeto e de pau
13. Fazer um programa para contar quantas consoantes existem em um frase informada
pelo usuario.
14. Faca um programa que receba uma string e a imprima-a escrita de tras pra frente.
15. Faca um programa que leia uma string e diga se ela e palndrome. Uma string e
palndrome quando pode ser lida tanto de tras pra frente quanto de frente para tras e
possui exatamente a mesma seq
uencia de caracteres. Ex.: ASA, SUBI NO ONIBUS,
ARARA. Desconsidere os espacos.
24
21. Faca um programa para receber uma string informada pelo usuario de no maximo 50
caracteres e fazer uma estatstica dos caracteres digitados. Por exemplo, para a string
O EXERCICIO E FACIL, a estatstica mostrada sera O = 2, E = 3, X = 1, R
= 1, C = 3, I = 3, F = 1, A = 1, L = 1. (OBS: Pode ser desconsiderados os
acentos das palavras).
22. Observe atentamente o codigo abaixo. Explique por que as strings st1 e st2 devem ter
no maximo 10 caracteres se os respectivos vetores foram declarados com 11 posicoes.
Explique tambem o funcionamento do codigo.
#include <string.h>
#include <iostream.h>
main( )
{
char st1[11], st2[11], st3[21], ch;
int i, j;
cout << "\n Digite a primeira string com at
e 10 caracteres ";
gets(st1);
cout << "\n Digite a segunda string com at
e 10 caracteres ";
gets(st2);
for (i = 0; st1[i]; i++)
st3[i] = st1[i];
for (j = 0; st2[j]; j++)
st3[i+j] = st2[j];
j = j+i;
for (i = j; i ; i--)
{
ch = st3[i-1];
cout << ch;
}
cout << "\n\n";
}
23. Faca um programa que receba uma string e faca com que a primeira letra de cada
palavra fique em mai
usculo. Para isso, basta subtrair 32 do elemento que deseja alterar
para mai
usculo.
chrNome[0] = chrNome[0] - 32;
Exemplo:
26
27
Captulo 7
Lista de Exerccios - Matrizes
Esta lista de exerccios e composta por exerccios teoricos e praticos que abordam os
conceitos de manipulacao de matrizes da Linguagem C.
1. Qual das alternativas a seguir corresponde `a declaracao de uma matriz:
(a) ( ) int M;
(b) ( ) char X[5];
(c) ( ) double VET[10][10];
(d) ( ) float MATRIZ[10];
2. Declarada a matriz M23 , quais os valores que podem ser armazenados na matriz:
int M[2][3];
(a) ( ) 1.2; 4.7; 5.6; 20.4; 25; 89.12;
(b) ( ) 12; 7; 1; 3; 9; 6;
3. Faca um programa que receba uma matriz M55 e retorne a soma dos seus elementos.
4. Escrever um algoritmo para armazenar valores numericos em uma matriz M56 . A
seguir, calcular a media dos valores pares contidos na matriz e escrever seu conte
udo.
5. Escrever um algoritmo para ler uma matriz A74 contendo valores numericos distintos
(seu programa deve validar essa condicao). Depois encontre o menor valor contido na
matriz e sua posicao.
6. Gerar a matriz transposta de uma matriz B55 dada pelo usuario (a transposta e obtida
permutando-se as linhas e as colunas de uma matriz).
7. Dado um valor numerico x e uma matriz A34 elabore um algoritmo que calcule e exiba
uma outra matriz B que devera conter cada elemento da matriz A dividido pelo valor
numerico x.
28
7
21
63
2a Impressao:
89
4
32
4
16
39
7
21
63
14
32
63
12. Escrever um algoritmo que le uma matriz M55 e cria 2 vetores SL[5], SC[5] que
contenham respectivamente as somas das linhas e das colunas de M. Imprima a matriz
e os vetores criados.
13. Escrever um programa que leia duas matrizes de ordem 4 6 e cria:
(a) Uma matriz M1 que seja a soma das duas matrizes;
29
0
0
1
0
1
0
0
0
0
1
0
0
0
0
0
1
Observe que:
2 1 0
1 2 0
0
0 1
Nao e permutacao.
Dada uma matriz Ann verifique se A e ou nao uma permutacao.
19. Dada uma matriz Amn , imprimir o n
umero de linhas e o n
umero de colunas nulas da
matriz.
Exemplo: m = 4 e n = 4
30
1
4
0
0
0
0
0
0
2
5
0
0
3
6
0
0
8 0 7
4 5 6
3 10 2
Sada: A matriz e um quadrado magico.
Dada uma matriz quadrada Ann verificar se A e um quadrado magico.
21. Os elementos Aij de uma matriz de inteiros Anm representam os custo de transporte
da cidade i para a cidade j. Dado n itinerarios, cada um com k cidades, calcule o custo
total para cada itinerario.
Exemplo:
4
5
2
7
1
2
1
1
2 3
1 400
3 8
2 5
O custo do itinerario 0 3 1 3 3 2 1 0 e
A03 + A31 + A13 + A33 + A32 + A21 + A10 = 3 + 1 + 400 + 5 + 2 + 1 + 5 = 417
22. Faca um programa que leia elementos de uma matriz quadrada de ordem n e armazene
o elemento somente se Aij e maior que todos os elementos anteriores, caso seja menor
imprima um aviso na tela e peca outro n
umero ao usuario.
23. Faca um programa que leia uma matriz de ordem 3 3 e imprima a sua resultante.
Suponha duas matrizes Aab e Bmn .
A B so e possvel se e somente se b = m. A matriz resultante seria do tipo Rbn .
B A so e possvel se e somente se n = a. A matriz resultante seria do tipo Ran .
Exemplo:
"
A=
0 2 3
4 5 6
1 2
B= 3 4
5 6
31
A B e possvel.
B A nao e possvel. A matriz resultante e do tipo R22 .
24. Na teoria de Sistemas define-se elemento mnimax de uma matriz, o menor elemento
da linha em que se encontra o maior elemento da matriz. Faca um programa que leia
uma matriz A1010 e determina o elemento mnimax desta matriz, imprima a linha e
coluna que o elemento se encontra, o elemento e o maior elemento da matriz.
25. Dadas duas matrizes inteiras A e B de ordem 4 3, fazer um programa que gere
uma matriz booleana C, tal que o elemento Cij seja V se os elementos nas posicoes
respectivas das matrizes A e B forem iguais, e F caso contrario. Exibir as matrizes A,
B e C.
Exemplo:
A=
2
1
3
4
4
5
7
6
6
9
2
8
B=
2
1
3
4
32
5
9
7
5
8
7
1
8
C=
V
V
V
V
F
F
V
F
F
F
F
V
Captulo 8
Lista de Exerccios - Structs
Esta lista de exerccios e composta por exerccios teoricos e praticos que abordam os
conceitos de manipulacao de structs da Linguagem C.
1. Assinale na alternativa que corresponde `a forma correta de uma estrutura:
(a) ( )
struct
{
int a;
char b[5];
}
(b) ( )
struct 123P
{
int a;
char b[5];
}
(c) ( )
struct P123
{
int a;
char b[5];
};
33
2. Escreva um programa que preencha uma variavel do tipo struct e depois exiba na tela.
A estrutura devera conter campos para: nome, endereco, idade, telefone, data. Sendo
que data devera ser uma estrutura com os campos: dia, mes e ano.
3. Imagine a seguinte situacao: voce precisa armazenar na memoria os dados referentes
a 60 alunos nome, serie e suas notas ao longo do ano (4 bimestres) em 4 disciplinas,
ingles, frances, matematica e portugues. Crie uma estrutura para resolver o problema
acima. Por fim, imprima o nomes do melhor aluno de cada materia, ou seja, os alunos
com maiores notas nas respectivas materias.
4. Faca um programa que leia o nome e o sexo de n pessoas. Crie uma estrutura que
armazene todas essas informacoes. Esta estrutura deve ter um campo para data de
nascimento, a geracao da data de nascimento deve ser feita aleatoriamente atraves do
trecho de codigo abaixo:
D.Mes = 1 + (rand() \% 12);
D.Ano = 1950 + (rand() \% 49);
D.Dia = 1 + (rand() \% 30);
O programa deve conter um menu com as seguintes opcoes:
Inserir informacoes.
Listar todos os nomes e respectivas idades.
Listar os nomes das pessoas mais velhas do que uma certa idade fornecida.*
*Na opcao 3, apos entrar neste campo, perguntar a idade para listar os nomes;
5. Uma Loja de moveis deseja cadastrar seus clientes, para isso voce foi contratado para
fazer um programa que auxilie nessa tarefa. Faca um programa que leia o nome, idade,
renda, endereco, cidade, estado e CEP de um cliente e informe seu credito na loja (50%
da renda). O programa deve finalizar quando for digitado FIM no nome do cliente .
6. O Banco Satolepense S/A necessita de um programa capaz de ler e armazenar os dados
de n clientes Vips. Os dados sao: nome, sobrenome, data de abertura da conta, valor
do deposito mais recente e saldo. Suponha que os dados referente a um cliente sao lidos
somente uma vez, no incio da execucao. Apos a leitura, o programa deve imprimir:
(a) Todos os dados do cliente mais antigo (ou seja, cliente com data de abertura de
conta mais antiga), juntamente com a mensagem cliente mais antigo.
(b) Lista dos clientes (no formato: nome, sobrenome, saldo) com saldo maior que um
dado valor, este valor deve ser fornecido pelo usuario, juntamente com a mensagem
clientes com saldo maior que valor .
Defina uma variavel do tipo struct para armazenar os dados dos clientes Vips.
34
7. Uma determinada fabrica paga seus funcionarios por horas trabalhadas e faz esse
controle atraves de um sistema de cartao de ponto eletronico. Ao passar o cracha no
aparelho pela segunda vez no mesmo dia, na sada do expediente, o sistema grava um
registro com o n
umero da matrcula do funcionario e a quantidade de horas trabalhadas
naquele dia. Os registros vao sendo acumulados dia a dia, ao longo de um perodo. O
valor atual pago por hora e R$13,66 e os n
umeros de matrculas variam de 1 a 1000.
O tipo abaixo define o registro que deve ser produzido pelo aparelho:
struct REG_PONTO
{
int matricula;
float horas;
};
O programa deve ter um menu contendo:
Ponto.
Ver as horas trabalhadas por uma dado funcionario.
Ver o valor que um dado funcionario tem a receber no momento.
Sair.
8. Faca um programa que cadastre os dados da folha de pagamento. A ficha do funcionario
contem matrcula, nome, salario, data de admissao. Leia os dados de n funcionarios e
de o relatorio no final:
Lista de funcionarios cadastrados (matrcula, nome, salario e data admissao).
Total da folha (soma dos salarios).
O salario medio.
O menor salario.
A matrcula, o nome e a data de admissao do funcionario que tem o maior salario.
9. Num determinado dia foi feita uma pesquisa de audiencia de TV em varias casas de
uma certa cidade. Para cada casa visitada, o entrevistador (munido de um notebook)
questionava o n
umero de aparelhos de televisao existentes e, para cada aparelho questionava o n
umero de pessoas que estavam assistindo tal TV, solicitando tambem que se
informasse qual emissora de televisao estava sendo assistido dentre as opcoes (Cultura,
SBT, Globo, Record, MTV, Futura, RedeTV, Band ou nenhum). Se o TV estivesse
desligado, entao nenhum pessoa estava utilizando tal aparelho e nada era anotado.
Implementar uma versao do programa sendo usado pelo entrevistador de modo que:
Sejam lidos um n
umero indeterminado de dados, terminando a pesquisa quando
o entrevistador escolher a opcao para FIM.
35
36
Struct Banda
{
char nome[10];
int dia;
int m^
es;
int ano;
float valor;
int membros;
char produtora[15];
};
12. Uma pesquisa sobre algumas caractersticas fsicas da populacao de uma determinada
regiao coletou os seguintes dados, referentes a cada habitante, para serem analisados:
Sexo (masculino, feminino)
Cor dos olhos (azuis, verdes, castanhos)
Cor dos cabelos (louros, castanhos, pretos)
Idade em anos.
Os dados de cada habitante serao fornecidos em linhas, sendo que um valor de idade
negativo indica o fim da leitura. O programa a ser implementado devera fornecer as
seguintes informacoes:
(a) O n
umero de homens de olhos verdes, cabelos castanhos e idade entre 30 e 40
anos.
(b) O n
umero de mulheres de olhos azuis, cabelos louros e idade entre 20 e 30 anos.
(c) A porcentagem de criancas de ambos os sexos, olhos castanhos, cabelos castanhos
ou pretos e idade inferior a 14 anos.
13. Faca um programa que leia as notas, nomes e disciplinas de n academicos de uma
universidade. Esta universidade usa o seguinte sistema de medias:
Media 7,5 Aprovado.
Media 7,5 e media > 4,5 Exame.
Media 4,5 Reprovado.
Seu programa deve calcular a media de cada academico. Em seguida, seu programa
deve informar o n
umero de academicos aprovados, de exame e reprovados e seus
respectivos nomes. Deve mostrar ainda, a disciplina com o maior ndice de aprovacao,
caso haja empate mostre as que possuem o mesmo ndice.
37
14. Foi realizada uma pesquisa entre 500 habitantes de uma certa regiao. De cada habitante
foram coletados os dados: idade, sexo, salario e n
umero de filhos. Crie a estrutura de
dados adequada para armazenar estas informacoes e armazene as informacoes digitadas
pelo usuario na estrutura de dados criada. Calcule a media do salario dos habitantes,
a media de filhos dos homens, qual o sexo da pessoa com o maior salario e a idade e o
n
umero de filhos da pessoa com o menor salario.
15. Faca um programa que tenha as seguintes especificacoes:
(a) Uma estrutura que contenha os campos:
Marca.
Ano.
N
umero Serie motor.
Cor.
Preco.
Placa.
OBS. A placa deve conter 3 letras e 4 n
umeros
(b) Uma tabela de impostos
Para carros entre 1970 e 1980 0,8% sobre o valor do carro.
Para carros entre 1980 e 1990 0,9% sobre o valor do carro.
Para carros entre 1990 e 2000 1% sobre o valor do carro.
Para carros acima de 2000 1,5% sobre o valor do carro.
Seu programa deve receber as informacoes de n carros. Seu programa deve calcular
o imposto para cada veculo e acrescentar ao preco do carro. Em seguida imprima as
placas, a cor, n
umero de serie do motor e a marca dos cinco carros mais caros. Imprima
tambem o ano do carro mais antigo e seu preco.
16. Um programador precisa fazer um programa que cadastre as fitas de vdeo (VHS) e os
DVDs de uma locadora de filmes. Devido ao tamanho das prateleiras, a locadora pode
ter no maximo 1000 itens que contem as seguintes informacoes cada:
N
umero de Serie (0 a 999).
Tipo (VHS ou DVD).
Ttulo do Filme.
Tipo de Filme (Infantil, Adulto, romance, etc.).
Situacao: disponvel, alugado, extraviado.
Considerando que a informacoes de cada filme sera armazenada em um vetor indexado
pelo N
umero de Serie, faca um programa que simule o funcionamento desta locadora.
38
17. Deseja-se fazer a emissao da folha de pagamento de uma empresa. Para cada um dos
funcionarios sao dadas as seguintes informacoes:
Nome do funcionario.
Salario base do funcionario.
Horas extras diurnas (hed).
Horas extras noturnas (hen).
N
umero de dependentes.
N
umero de faltas em horas.
Valor de vales retirados no mes.
A empresa possui n (n 100) funcionarios, que devem ser lidos inicialmente. Apos
ler estas informacoes, imprima o nome, salario, valor em horas extras, salario famlia,
salario bruto, valor de desconto do INSS, faltas no mes (em horas), valor dos vales,
imposto de renda e o salario lquido sabendo que:
Valor em horas extras = (hed * salario base + hen * 1.2 * salario base)/160.
Salario famlia = N
umero de dependentes * 0.05 * salario base.
Salario bruto = salario base + salario famlia + valor em horas extras.
INSS = 0.08 * salario bruto.
Valor em faltas = n
umero de faltas * salario base / 160.
Imposto de renda = 0.13 * salario bruto.
Salario lquido = salario bruto - INSS - valor em faltas - imposto de renda.
18. Uma empresa de vendas de produtos de informatica deseja implantar um sistema
informatizado para controle de estoque. Neste sentido, faca um programa que execute
as seguintes tarefas:
(a) Cadastrar os n (n 1000) produtos da loja, onde cada produto possui as seguintes
informacoes:
Codigo do produto.
Quantidade disponvel em estoque.
Preco Unitario.
Nome do Produto.
Marca do Produto.
Seu programa deve cadastrar os produtos conforme solicitado acima.
(b) Ler um pedido de compras com as seguintes informacoes:
39
40
Captulo 9
Lista de exerccios 9 - Olimpiada
Brasileira de Inform
atica
Esta lista de exerccios e composta por exerccios que abordam todo o conte
udo
ministrado nas aulas do Curso preparatorio para a Olimpiada Brasileira de Informatica.
Auto Estrada
Arquivo fonte: auto.c, auto.cc auto.cpp, auto.pas
Certas regioes resolveram o problema de trafego intenso com a construcao de auto
estradas, que sao estradas contendo em geral quatro ou mais pistas de rolagem em cada
sentido, de forma que um n
umero grande de carros possa passar sem que ocorram congestionamentos. O problema das auto estradas e que, junto com os carros temos um aumento
consideravel de rudos nas imediacoes da pista, o que incomoda os moradores das regioes
proximas. A GoTo engenharia, uma empresa do ramo de construcao especializada em obras
de estradas, encontrou uma solucao engenhosa para o problema: instalar grandes paineis
defletores de som de cada lado da auto estrada para tentar minimizar o rudo percebido
pelos vizinhos. Os paineis sao construdos em blocos contnuos de 10 metros lineares. A
auto estrada tambem e dividida em blocos de 10 metros de extensao, sendo cada bloco
descrito por um codigo, como definido abaixo:
P - Pista, trecho em linha reta sem curvas ou sadas. Deve-se instalar um painel de
cada lado da auto estrada.
C - Curva, trecho em curva de 90 graus na auto estrada. Deve-se instalar dois paineis
de concreto do lado externo da curva; o outro lado fica sem painel instalado.
A - Acesso, trecho em linha reta no qual existe uma entrada ou uma sada partir de
um dos lados da auto estrada (mas nao do outro). Deve-se instalar um painel no lado
onde nao existe o acesso.
41
D - Duplo acesso, trecho em linha reta no qual existem dois acessos (entradas ou sadas,
em qualquer combinacao possvel, um de cada lado da rodovia. Nenhum painel deve
ser instalado nesse bloco da auto estrada.
Tarefa
Apesar de ser uma empresa formada por engenheiros, nenhum dos funcionarios da GoTo
sabe programar, de forma que eles decidiram contrataram voce como consultor independente.
Voce deve escrever um programa para, dado um mapa da auto estrada, determinar quantos
paineis defletores sao necessarios para cobrir toda a extensao dessa auto estrada.
Entrada
A entrada e composta de varios casos de Teste, que deve ser lido do dispositivo de entrada
padrao (normalmente o teclado).
12
Restricoes
(1 C 1000000)
(C = 0, somente para indicar o final da entrada )
43
Fliperama
Arquivo fonte: fliperama.c, fliperama.cc, fliperama.cpp, fliperama.pas
Bebe-bebe e um jogo muito popular de fliperama. E, como a maioria dos jogos de
fliperama, ele deve mostrar as maiores pontuacoes. Para esse fim, a companhia Otori te
contratou.
Tarefa
Escreva um programa que, dada a lista de todas as pontuacoes dos jogos de Bebe-bebe,
mostra os melhores placares em ordem decrescente.
Entrada
A entrada e composta de varios casos de Teste. A primeira linha consiste de dois inteiros
N e M, dizendo quantas partidas foram jogadas de Bebe-bebe e quantas linhas cabem
no mostrador de melhores rankings. As N linhas seguintes contem cada uma um inteiro
indicando a pontuacao obtida em cada jogo. O final da entrada e indicado por N = M = 0.
Exemplo de entrada
74
100
200
200
150
30
524
942
21
4000
2000
00
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e enumerado
a partir de 1. Nas M linhas seguintes deve imprimir as M maiores pontuacoes em ordem
decrescente. Apos cada Teste imprima uma linha em branco.
44
Exemplo de sada
Teste 1
942
524
200
200
Teste 2
4000
Restric
oes
1 N 10000
1 M 500
M N
(M = N = 0 somente para indicar o final da entrada)
45
Fatorial
Arquivo fonte: fatorial.c, fatorial.cc, fatorial.cpp, fatorial.pas
Joaozinho e um garoto esperto da sexta serie. Ele gosta muito de matematica e
descobriu que sua professora e muito preguicosa. Nas provas da materia a professora pede
que as criancas circulem a resposta com um quadrado colorido, e que facam o primeiro
dgito diferente de zero (da direita para esquerda) do n
umero especialmente grande com
caneta. Joaozinho desconfiou que a professora olhava apenas para aquele dgito para corrigir
a questao. A turma aprendeu a calcular o fatorial de um n
umero, e isso sera cobrado na
proxima prova. Joaozinho esta convencido de que nao precisa escrever de fato o n
umero
correto, desde que o primeiro dgito (olhando da direita para esquerda) seja o correto.
Tarefa
Sua tarefa neste problema e ajudar Joaozinho a calcular para um n
umero inteiro N da
entrada, o primeiro dgito (da direita para esquerda) de N! que seja diferente de zero.
Entrada
A entrada e composta de varios conjuntos de Teste. A primeira linha de cada Teste consiste
um inteiro N. O final da entrada e indicado por N = 0.
Exemplo de entrada
5
4
0
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e enumerado a
partir de 1. Na linha seguinte imprima o primeiro dgito (da direita para esquerda) diferente
de zero. Apos cada Teste imprima uma linha em branco.
Exemplo de sada
Teste 1
2
Teste 2
46
4
Restric
oes
1 N 20 (N = 0 apenas para indicar o fim da entrada)
47
3
alex 5
abel 5
lucas 10
2
flavio 3
junior 4
0
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e numerado a
partir de 1. Na linha seguinte imprima o nome do aluno reprovado. Apos cada Teste
imprima uma linha em branco.
Exemplo de sada
Teste 1
infelizreprovado
Teste 2
alex
Teste 3
flavio
(esta saida corresponde ao exemplo de entrada acima)
Restric
oes
1 N 100(N = 0 apenas para indicar o fim da entrada)
49
Ele est
a impedido
Arquivo fonte: impedido.c, impedido.cc, impedido.cpp, impedido.pas
A Rede do Hemisferio e a maior rede de televisao de Tumbolia, um pequeno pas
situado a leste da America do Sul. O esporte mais popular em Tumbolia, obviamente, e o
futebol; muitos jogos sao transmitidos toda semana em Tumbolia. A Rede do Hemisferio
recebe muitos pedidos para repassar lances polemicos; normalmente esses acontecem quando
um jogador e dito impedido pelo juz. Um jogador atacante esta impedido se ele esta mais
proximo da linha do gol do oponente do que o pen
ultimo adversario. Um jogador nao esta
impedido se:
ele esta na mesma linha que o pen
ultimo adversario ou
ele esta na mesma linha que os dois u
ltimos adversarios.
Tarefa
Atraves do uso de tecnologia de computacao grafica, a Rede do Hemisferio consegue tirar
uma foto do campo e determinar as distancias dos jogadores ate a linha do gol do time
defensor, mas eles ainda precisam de um programa que, dadas essas distancias, decida se um
jogador esta impedido.
Entrada
A entrada e composta por varios conjuntos de Teste. A primeira linha de cada caso de
teste contem dois inteiros A e D separados por um espaco indicando, respectivamente, o
n
umero de jogadores atacantes e defensores envolvidos na jogada. A proxima linha contem
A inteiros Bi separados por um espaco, indicando as distancias dos jogadores atacantes ate
a linha do gol. A proxima linha contem D inteiros Ci separados por um espaco, indicando
as distancias dos defensores ate a linha do gol. O final da entrada e dado por A = D = 0.
Exemplo de entrada
23
500 700
700 500 500
22
200 400
200 1000
34
530 510 490
50
51
Recuperac
ao
Arquivo fonte: recupera.c, recupera.cc, recupera.cpp, recupera.pas
A nossa grandiosa Professora Cris no u
ltimo aquecimento ficou conhecida como
a grande maquiavelica da FEC(Faculdade de Engenharia e Computacao). A dignssima
professora exigiu que os alunos formassem uma fila em ordem lexicografica (pelo nome) com
no maximo k permutacoes. Isto fez com que muitos alunos nem sequer entrassem na sala
para fazer a prova. No entanto, nesta seletiva ela resolveu se redimir perante seus alunos, e
resolveu aplicar um probleminha para recuperacao.
Tarefa
Sua tarefa, mesmo nao tendo sido reprovado, e dado uma sequencia de N inteiros a1 , a2 , .., an ,
onde 30 aj 30 para j = 1, 2, .., n, imprima, se existir, um inteiro ak tal que ak =
a1 + a2 + .. + ak1 . Se houver mais de um inteiro que satisfaca esta condicao, imprima o que
aparece primeiro na seq
uencia.
Entrada
A entrada e composta de varios conjuntos de Teste. A primeira linha de cada Teste consiste
em um inteiro N indicando o n
umero de inteiros da linha seguinte devem ser processados. O
final da entrada e indicado por N = 0.
Exemplo de entrada
1
0
7
1234567
3
245
0
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e enumerado
a partir de 1. Na linha seguinte imprima o inteiro que satisfaca a restricao descrita acima.
Caso nao exista tal inteiro imprima nao achei. Apos cada Teste imprima uma linha em
branco.
52
Exemplo de sada
Teste 1
0
Teste 2
3
Teste 3
nao achei
Restric
oes
1 N 100( N = 0 somente para indicar o fim da entrada)
53
Dama
Arquivo fonte: dama.c, dama.cc, dama.cpp, dama.pas
O jogo de xadrez possui varias pecas com movimentos curiosos: uma delas e a dama, que
pode se mover qualquer quantidade de casas na mesma linha, na mesma coluna, ou em uma
das duas diagonais, conforme exemplifica a Figura 9.1:
3535
5543
0000
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e enumerado
a partir de 1. Na linha seguinte seu programa deve imprimir um n
umero inteiro, indicando o
menor n
umero de movimentos necessarios para a dama chegar em sua casa de destino. Apos
cada Teste imprima uma linha em branco.
Exemplo de sada
Teste 1
1
Teste 2
0
Teste 3
2
Restric
oes
(1 X1 Y1 X2 Y2 8)
(X1 = Y1 = X2 = Y2 = 0, somente para indicar o final da entrada )
55
Apagando e Ganhando
Arquivo fonte: apaga.c, apaga.cc, apaga.cpp, apaga.pas
Juliano e fa do programa de auditorio Apagando e Ganhando, um programa no qual
os participantes sao selecionados atraves de um sorteio e recebem premios em dinheiro por
participarem.
No programa, o apresentador escreve um n
umero de N dgitos em uma lousa. O participante
entao deve apagar exatamente D dgitos do n
umero que esta na lousa; o n
umero formado
pelos dgitos que restaram e entao o premio do participante.
Tarefa
Juliano finalmente foi selecionado para participar do programa, e pediu que voce escrevesse
um programa que, dados o n
umero que o apresentador escreveu na lousa, e quantos dgitos
Juliano tem que apagar, determina o valor do maior premio que Juliano pode ganhar.
Entrada
A entrada e composta por varios conjuntos de Teste. A primeira linha de cada caso de teste
contem dois inteiros N e D, indicando a quantidade de dgitos do n
umero que o apresentador
escreveu na lousa e quantos dgitos devem ser apagados. A linha seguinte contem o n
umero
escrito pelo apresentador, que nao contem zeros a` esquerda. O final da entrada e indicado
por N = D = 0.
Exemplo de entrada
42
3759
63
123123
74
1000000
00
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e enumerado
a partir de 1. Na linha seguinte imprima o maior premio que Juliano pode ganhar. Apos
cada Teste imprima uma linha em branco.
56
Exemplo de sada
Teste1
79
Teste 2
323
Teste 3
100
Restric
oes
( 1 D < N 100000)
(N = D = 0, somente para indicar o final da entrada )
57
Hist
orico de Comandos
Arquivo fonte: fliperama.c, fliperama.cc, fliperama.cpp, fliperama.pas
Uma interface por linha de comando (ILC) e um dos tipos de interface humanocomputador mais antigos que existem. Uma ILC permite a interacao com o software atraves
de um interpretador de comandos, sendo normalmente acessvel em um terminal (ou janela)
de texto. A vantagem de um interpretador de comandos e que ele permite que o usuario
opere o sistema usando apenas o teclado. Ainda hoje em dia, em que estamos acostumados
com interfaces graficas sofisticadas, muitos aplicativos e sistemas operacionais incluem algum
tipo de interface por linha de comando, e muitos usuarios ainda preferem usa-la para grande
parte das tarefas. Um dos recursos mais u
teis de um interpretador de comandos e o historico
de comandos. Quando um comando e digitado e executado, ele e colocado no historico
de comandos do terminal. O comando pode ser exibido novamente no terminal apertando
a tecla ; a tecla Enter executa o comando novamente quando o comando esta sendo
exibido no terminal. Todos os comandos executados sao guardados no historico: pressionar
a tecla duas vezes exibe o pen
ultimo comando executado, pressiona-la tres vezes exibe o
antepen
ultimo comando, e assim sucessivamente. Por exemplo, se o historico inicial e (A,
B, C, D), para repetir o comando C basta pressionar duas vezes a tecla . O historico
sera entao atualizado para (A, B, C, D, C). Nesse ponto, para repetir o comando A sera
necessario pressionar cinco vezes a tecla ; o historico sera atualizado para (A, B, C, D,
C, A). Nesse ponto, para repetir mais uma vez o comando A basta pressionar uma vez a
tecla ; o historico sera atualizado para (A, B, C, D, C, A, A). Leandro e administrador
de sistemas e usa freq
uentemente o interpretador de comandos para gerenciar remotamente
os servidores que administra. Em geral, ele precisa apenas repetir comandos que ja havia
digitado antes. Enquanto estava trabalhando em um servidor, ele teve uma curiosidade:
quantas vezes ele precisa pressionar a tecla para executar uma determinada seq
uencia
de comandos? Ele sabe quais sao as posicoes no historico dos comandos que ele necessita
executar, mas nao sabe resolver esse problema. Por isso, pediu que voce fizesse um programa
que respondesse `a pergunta dele.
Tarefa
Dada um lista de comandos a serem executados calcular o n
umero de vezes que Leandro
pecisa apertar a tecla .
Entrada
A entrada e composta de varios casos de teste. A primeira linha de cada caso de teste contem
um n
umero inteiro N, indicando o n
umero de comandos que Leandro deseja executar . A
segunda linha de um caso de teste contem N inteiros P1 , P2 , ..., PN , que indicam as posicoes
58
dos comandos no historico no momento inicial, na ordem em que os comandos devem ser
executados. Ou seja, o primeiro comando que deve ser executado esta inicialmente na posicao
P1 do historico; depois deve ser executado o comando que esta inicialmente na posicao P2 no
historico, e assim por diante, ate PN , que e a posicao inicial do u
ltimo comando que deve ser
executado. Note que pode haver Pi = Pj . As posicoes sao dadas em funcao do n
umero de
vezes que a tecla deve ser pressionada: um comando na posicao 5 necessita que a tecla
seja pressionada cinco vezes antes de aparecer no terminal (note que a` medida que comandos
vao sendo executados, a posicao de um dado comando no historico pode mudar). O final da
entrada e indicado por N = 0.
Exemplo de entrada
3
253
4
2143
5
12345
4
1313
0
Sada
Para cada caso de teste, seu programa deve imprimir um identificador do teste do tipo
Teste n, onde n e numerado a partir de 1. A segunda linha deve conter o n
umero de vezes
que Leandro precisa pressionar a tecla para executar todos os comandos.
Exemplo de sada
Teste 1
13
Teste 2
16
Teste 3
25
Teste 4
59
9
(o exemplo de sada corresponde ao exemplo acima)
Restric
oes
(1 N 1000)
(1 Pi 1000000)
60
Rouba-Monte
Arquivo fonte: rouba.c, rouba.cc, rouba.cpp, rouba.pas
Um dos jogos de cartas mais divertidos para criancas pequenas, pela simplicidade,
e Rouba- Monte. O jogo utiliza um ou mais baralhos normais e tem regras muito simples.
Cartas sao disting
uidas apenas pelo valor (as, dois, tres, . . .), ou seja, os naipes das cartas
nao sao considerados (por exemplo, as de paus e as de ouro tem o mesmo valor). Inicialmente
as cartas sao embaralhadas e colocadas em uma pilha na mesa de jogo, chamada de pilha
de compra, com face voltada para baixo. Durante o jogo, cada jogador mantem um monte
de cartas, com face voltada para cima; em um dado momento o monte de um jogador pode
conter zero ou mais cartas. No incio do jogo, todos os montes dos jogadores tem zero
cartas. Ao lado da pilha de compras encontra-se uma area denominada de area de descarte,
inicialmente vazia, e todas as cartas colocadas na area de descarte sao colocadas lado a lado
com a face para cima (ou seja, nao sao empilhadas). Os jogadores, dispostos em um crculo
ao redor da mesa de jogo, jogam em sequencia, em sentido horario. As jogadas prosseguem
da seguinte forma:
O jogador que tem a vez de jogar retira a carta de cima da pilha de compras e a mostra
aos outros jogadores; vamos chamar essa carta de carta da vez.
Se a carta da vez for igual a alguma carta presente na area de descarte, o jogador retira
essa carta da area de descarte colocando-a, juntamente com a carta da vez, no topo de
seu monte, com as faces voltada para cima, e continua a jogada (ou seja, retira outra
carta da pilha de compras e repete o processo).
Se a carta da vez for igual a` carta de cima de um monte de um outro jogador, o jogador
roubaesse monte, empilhando-o em seu proprio monte, coloca a carta da vez no topo
do seu monte, face para cima, e continua a jogada.
Se a carta da vez for igual a` carta no topo de seu proprio monte, o jogador coloca a
carta da vez no topo de seu proprio monte, com a face para cima, e continua a jogada.
Se a carta da vez for diferente das cartas da area de descarte e das cartas nos topos dos
montes, o jogador a coloca na area de descarte, face para cima, e a jogada se encerra
(ou seja, o proximo jogador efetua a sua jogada). Note que esse e o u
nico caso em que
o jogador nao continua a jogada.
O jogo termina quando nao ha mais cartas na pilha de compras. O jogador que tiver o maior
monte (o monte contendo o maior n
umero de cartas) ganha o jogo. Se houver empate, todos
os jogadores com o monte contendo o maior n
umero de cartas ganham o jogo.
Tarefa
61
62
Teste 1
012
Teste 2
51
Teste 3
32
Restric
oes
(2 N 10.000)
(2 J 20 e J N )
63
Ambul
ancia
Arquivo fonte: ambulancia.c, ambulancia.cc, ambulancia.cpp, ambulancia.pas
O municpio de Aguas
Molhadas e formado por varias vilas interligadas por igarapes.
Os igarapes funcionam como sistema viario, ja que a maioria dos habitantes usa barcos
como meio de transporte. Os igarapes tem uma forte corrente, o que obriga os barcos a
transitarem todos no mesmo sentido em cada igarape (na verdade, e proibido o transito de
barcos na contra-mao). A prefeitura do municpio mantem um u
nico Posto de Sa
ude e um
barco-ambulancia utilizado para transporte de doentes. O timoneiro do barco-ambulancia
esta sempre com pressa, e tem medo de confundir-se no emaranhado de igarapes quando
atende um chamado para buscar um doente em alguma vila. Por isso, ele deseja uma lista
de todos os possveis caminhos entre a vila onde se encontra o Posto de Sa
ude e cada outra
vila do municpio, como mostra a Figura 9.2.
Figura 9.2: Sete vilas ligadas por onze igarapes com mao u
nica.
Tarefa
Sua tarefa e escrever um programa que liste todos os caminhos que partem da vila onde
se encontra o Posto de Sa
ude ate cada outra vila do municpio, de forma que em cada
caminho nenhuma vila e repetida. As vilas sao numeradas de 1 a N, sendo que a vila onde
se encontra o Posto de Sa
ude sera sempre a de n
umero 1.
Entrada
A entrada e composta de varios conjuntos de teste. A primeira linha de um conjunto de
teste contem um n
umero inteiro N que indica a quantidade de vilas do municpio. As linhas
seguintes contem, cada uma, dois inteiros positivos X e Y que indicam que a vila X tem um
igarape que a liga diretamente com a vila Y, sem passar por outras vilas, com o transito
fluindo na direcao de X para Y. O final da lista de igarapes e indicado por X = 0 e Y = 0.
O final da entrada e indicado por N = 0.
64
Exemplo de Entrada
2
12
21
00
7
12
26
74
71
45
43
34
64
67
62
57
00
0
Sada
Para cada conjunto de teste da entrada seu programa deve produzir um conjunto de sada com
uma lista de caminhos. A primeira linha de um conjunto de sada deve conter o identificador
do conjunto, no formato Teste n, onde n e numerado a partir de 1. As linhas seguintes
devem conter os caminhos, ordenados lexicograficamente. Cada caminho e composto de uma
seq
uencia de identificadores de vilas separados por um ou mais espacos em branco. A u
ltima
linha de um conjunto de sada deve ser deixada em branco.
Exemplo de Sada
Teste 1
12
Teste 2
12
126
1264
65
12643
12645
126457
1267
12674
126743
126745
Restric
oes
0 N 100(N = 0 apenas para indicar o final da entrada)
1Y N
1XN
66
Caixas
Arquivo fonte: caixa.c, caixa.cpp ou caixa.pas
Jose e um fazendeiro que cultiva Banana e Abacates, ele percebeu que sempre que
vende 1 caixa de Abacate tambem vende 1 caixa de Banana, nunca 2 caixas da mesma fruta.
Para melhorar a rapidez de suas vendas, Jose quer organizar as caixas de Abacate de maneira
que sempre fiquem a esquerda das caixas de Banana, porem, as caixas vazias nao devem ser
movidas para que mais tarde ele possa colocar Abacate ou Banana como preferir.
Tarefa
Jose pediu sua ajuda para fazer um programa que leia N caixas. O conte
udo de qualquer
duas caixas vazias adjacentes nao pode ser movido (trocadas) com outras caixas escolhidas,
preservando a sua posicao inicial. Deve obter-se uma configuracao onde todos os As (caixas
de abacate) sao colocados `a esquerda de todos os Bs (caixas de banana), as posicoes das
caixas vazias devem ser respeitadas.
Entrada
A entrada e composta por varios conjuntos de Teste. A primeira linha de cada caso de Teste
e um inteiro N. A segunda linha tera os N elementos, onde duas caixas adjacentes vazias
(representadas pelo 0), (N/2) 1 smbolos A e (N/2) 1 smbolos B. O final da entrada
e indicado por N = 0.
Exemplo de entrada
10
AAAA00BBBB
10
AAAABB00BB
6
BB00BAAA
0
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e enumerado a
partir de 1. Na linha seguinte imprima a configuracao das caixas de maneira que satisfaca a
necessidade de Jose. Apos cada Teste imprima uma linha em branco.
67
Exemplo de sada
Teste 1
ABAB00ABAB
Teste 2
ABABAB00AB
Teste 3
AB00ABAB
Restric
oes
1 N 10 (N sempre e par).
(N = 0. Somente para indicar o final de entrada).
68
Popularidade
Arquivo fonte: popularidade.c, popularidade.cc, popularidade.cpp, popularidade.pas
Uma escola esta promovendo uma eleicao de popularidade, para determinar, naturalmente, quem e o aluno mais popular. Foi definido, entao, que cada aluno devera votar nos
alunos de quem gosta. A quantidade de votos dados por cada aluno e variavel, isto e, cada
aluno pode votar em quantos alunos desejar, de acordo com suas preferencias. O vencedor
sera aquele que receber mais votos, ou seja, aquele para o qual mais alunos indicaram que
gostam dele. Para realizar a eleicao, cada aluno recebera uma cedula eleitoral contendo
os nomes de todos os alunos da escola (inclusive ele proprio), na qual devera preencher os
quadrados ao lado dos nomes dos alunos que gosta, utilizando caneta esferografica azul ou
preta. Apos o termino do perodo de votacao, as cedulas serao colocadas numa maquina, a
qual e capaz de informar quais quadrados foram preenchidos em cada cedula.
Tarefa
Voce, estagiario da escola em questao, ficou responsavel por apresentar um prototipo do
sistema que recebe as informacoes da maquina e contabiliza os dados da eleicao. Por se
tratar de um prototipo, sua tarefa e apenas escrever um programa que, dadas as informacoes
sobre simulacoes de preenchimento das cedulas, informe quantos votos recebeu o vencedor
da eleicao. Voce pode assumir que os alunos da escola sao participativos, de forma que
todos compareceram a` votacao e cada um preencheu exatamente uma cedula eleitoral. Voce
pode assumir, ainda, que os alunos nao sofrem por conflitos internos, de modo que cada
aluno gosta de si mesmo e vota em si mesmo. Note, porem, que a relacao gostar de nao e
simetrica, ou seja, se o aluno A gosta do aluno B, nao necessariamente o aluno B gosta do
aluno A.
Entrada
A entrada e composta por varios casos de teste, cada um correspondendo a uma simulacao
de eleicao. A primeira linha de um caso de teste contem apenas um inteiro, N (1 N
100), indicando a quantidade de alunos da escola (identificados por inteiros de 1 a N) e,
por conseq
uencia, a quantidade de cedulas preenchidas. A seguir ha N linhas, cada uma
correspondendo a uma cedula processada. Cada linha contem N inteiros, onde o j -esimo
inteiro da i-esima linha e igual a 1, caso o j -esimo quadrado da cedula i esteja preenchido
(ou seja, o aluno de identificador i votou no aluno de identificador j ); ou e igual a 0, caso
contrario (o aluno de identificador i nao votou no aluno de identificador j ). A entrada
termina quando N = 0.
Exemplo de entrada
69
3
101
011
101
5
11100
11011
10101
01010
01111
3
100
010
001
0
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e enumerado a
partir de 1. Na linha seguinte seu programa deve imprimir apenas um inteiro, correspondente
a` quantidade de votos recebidos pelo vencedor da eleicao.
Exemplo de sada
Teste 1
3
Teste 2
4
Teste 3
1
70
Sudoku
Arquivo fonte: sudoku.c, sudoku.cc, sudoku.cpp, sudoku.pas
O jogo de Sudoku espalhou-se rapidamente por todo o mundo, tornando-se hoje o passatempo
mais popular em todo o planeta. Muitas pessoas, entretanto, preenchem a matriz de forma
incorreta, desrespeitando as restricoes do jogo. A matriz do jogo e uma matriz de inteiros
9 9 . Para ser uma solucao do problema, cada linha e coluna deve conter todos os n
umeros
de 1 a 9. Alem disso, se dividirmos a matriz em 9 regioes 3 3, cada uma destas regioes
tambem deve conter os n
umeros de 1 a 9. O exemplo abaixo mostra uma matriz que e uma
solucao do problema.
1
4
7
6
5
9
2
3
8
3
9
5
4
2
8
1
6
7
2
8
6
3
1
7
4
5
9
5
2
3
1
7
4
9
8
6
7
6
8
5
9
2
3
1
4
9
1
4
8
3
6
5
7
2
4
3
2
7
8
5
6
9
1
6
7
1
9
4
3
8
2
5
8
5
9
2
6
1
7
4
3
Tarefa
Sua tarefa neste problema e escrever um programa que verifica se uma matriz preenchida e
ou nao uma solucao para o problema.
Entrada
A entrada e composta por varios casos de teste. Na primeira linha e dado um n
umero N de
matrizes na entrada. Nas linhas seguintes sao dadas as N matrizes. Cada matriz e dada em
9 linhas, em que cada linha contem 9 n
umeros inteiros.
Exemplo de entrada
2
132579468
498261375
756384219
643158792
521793846
987426531
214935687
71
365817924
879642153
132579468
498261375
756384219
643158792
521793846
987426531
214935687
365817924
879642135
Sada
Para cada Teste, voce devera imprimir um identificador Teste n, onde n e enumerado a
partir de 1. Na segunda linha, seu programa devera imprimir SIM se a matriz for a solucao
de um problema de Sudoku, e NAO caso contrario. Imprima uma linha em branco apos cada
Teste.
Exemplo de sada
Teste 1
SIM
Teste 2
NAO
Restric
oes
1 N 20.
72
P
os-Fixa
Arquivo fonte: pos.c, pos.cc, pos.cpp, pos.pas
Paulo e um menino muito esperto e curioso. Na tarde de ontem, ele estava resolvendos
os exerccios de matematica da escola. Paulo observou que sempre as operacoes eram
realizadas da esquerda para a direita, obdecendo as regras das operacoes. Ele resolveu,
pesquisar na internet, se resolver os exerccios da direita para esquerda era valido, e num
VALIDO
73
O piso das pontes e feita de tabuas de tamanhos iguais. Mas as pontes sao velhas,
e algumas tabuas ca ram. Felizmente, todas as tabuas que sobraram estao em perfeitas
condicoes, ou seja, nao existe o perigo de Pedrinho pisar em uma delas e a tabua cair. Alem
disso, em nenhuma das pontes duas tabuas consecutivas ca ram, de forma que os buracos
deixados pelas tabuas que caram podem ser pulados com seguranca. No local onde Pedrinho
se encontra existe uma placa mostrando as ligacoes entre as pontes e tambem quantas tabuas
estao faltando em cada uma das pontes. Pedrinho esta cansado e nao ha muita visibilidade
durante a noite. Ele precisa, portanto, tomar muito cuidado para nao cair em algum dos
buracos. Pedrinho possui um laptop na mochila, mas so o usa para comunicar-se com os
amigos. Ele liga sua internet via satelite, encontra voce on-line, e pede sua ajuda.
Tarefa
Sua tarefa e escrever um programa que receba as informacoes sobre as pontes (as ligacoes
entre elas e a quantidade de tabuas faltando em cada uma) e calcule qual e o menor n
umero
de buracos que Pedrinho precisa pular para chegar ao outro lado do desfiladeiro.
74
Entrada
A entrada contem um u
nico conjunto de testes, que deve ser lido do dispositivo de
entrada padrao (normalmente o teclado). A primeira linha da entrada contem dois n
umero
inteiros N e M (1 N 1.000, 2 M 10.000) representando o n
umero de pilares
no desfiladeiro e o n
umero de pontes, respectivamente. Cada uma das M linhas seguintes
contem 3 inteiros S, T , B (0 S N + 1, 0 T N + 1 e 0 B 1.000), indicando
que existe uma ponte ligando os pilares S e T , e que possui B buracos. nao existe linha
representando ponte com S = T . O valor de pilar 0 representa a borda do desfiladeiro
onde Pedrinho esta, e o valor de pilar N + 1 representa a borda do desfiladeiro onde esta o
acampamento. nao existem duas pontes distintas ligando o mesmo par de locais (pilares ou
bordas do desfiladeiro). Voce pode supor que sempre existir e um caminho de pontes entre
o lado do desfiladeiro em que Pedrinho se encontra ate o lado do desfiladeiro onde esta o
acampamento.
Exemplo de entrada
25
011
023
039
Sada
Seu programa deve imprimir, na sada padrao, um n
umero inteiro representando
a menor quantidade de buracos que Pedrinho tera que pular para conseguir chegar ao
acampamento.
Exemplo de sada
3
(O exemplo de sada corresponde ao exemplo da entrada).
75
Domin
o
Arquivo fonte: domino.c, domino.cc, domino.cpp, domino.pas Todos conhecem o jogo de
dominos, em que pecas com dois valores devem ser colocadas na mesa em seq
uencia, de tal
forma que os valores de pecas imediatamente vizinhas sejam iguais. O objetivo desta tarefa
e determinar se e possvel colocar todas as pecas de um conjunto dado em uma formacao
valida.
Figura 9.3: Conjunto de seis pecas e uma formacao utilizando todas as seis pecas
Tarefa
dado um conjuto de pecas de domino. Cada peca tem dois valores X e Y, com X e Y
E
variando de 0 a 6 (X pode ser igual a Y). Sua tarefa e escrever um programa que determine
se e possvel organizar todas as pecas recebidas em seq
uencia, obedecendo as regras do jogo
de domino.
Entrada
A entrada e composta de varios conjuntos de teste. A primeira linha de um conjunto de
testes contem um n
umero inteiro N que indica a quantidade de pecas do conjunto. As N
linhas seguintes contem, cada uma, a descricao de uma peca. Uma peca e descrita por dois
inteiros X e Y (0 X 6 e 0 Y 6) que representam os valores de cada lado da peca.
O final da entrada e indicado por N = 0.
Exemplo de entrada
3
01
21
21
2
11
76
00
6
30
00
16
41
06
23
0
Sada
Para cada conjunto de teste da entrada seu programa deve produzir tres linhas na sada. A
primeira linha deve conter um identificador do conjunto de teste, no formato Teste n, onde
n e numerado a partir de 1. A segunda linha deve conter a expressao sim se for possvel
organizar todas as pecas em uma formacao valida ou a expressao nao(note a ausencia de
acento) caso contrario. A terceira linha deve ser deixada em branco. A grafia mostrada no
Exemplo de sada, abaixo, deve ser seguida rigorosamente.
Exemplo de sada
Teste 1
sim
Teste 2
nao
Teste 3
sim
(esta sada corresponde ao exemplo de entrada acima)
Restric
oes
0 N 100 (N = 0 apenas para indicar o final da entrada).
77