Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char c;
int count=0;
fp = fopen ("codigo.txt","r");
if (fp==0)
{
printf ("Arquivo nao encontrado!");
exit(fp);
}
while ((c=getc(fp)) != EOF)
count++;
printf ("Total de caracteres no arquivo: %d",count);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char c;
char str[100];
int count=0,i;
fp = fopen ("arquivo.txt","a");
if (!fp)
{
printf ("Arquivo nao encontrado!");
exit(fp);
}
printf ("Digite uma frase a ser gravada no arquivo: ");
gets (str);
fputs(str,fp);
putc ('\n',fp);
//for (i=0;str[i];i++)
// putc (str[i],fp);
fclose(fp);
fp = fopen ("arquivo.txt","r");
while ((c=getc(fp)) != EOF)
count++;
printf ("Total de caracteres no arquivo: %d",count);
fclose(fp);
return 0;
}
1
DEFINE
#include <stdio.h>
#define ret(a) ((a%2) ? (0):(1));
int main ()
{
int n;
printf ("Digite um numero: ");
scanf ("%d",&n);
n = ret(n);
printf ("%d",n);
return 0;
}
int main()
{
int vetor[MAX],i,j,aux;
//preencher o vetor
for (i=0;i<MAX;i++)
scanf ("%d",&vetor[i]);
//ordenar o vetor
for (i=0;i<=MAX-2;i++)
{
for (j=0;j<=MAX-2-i;j++)
{
if (vetor[j] > vetor[j+1])
{
aux = vetor[j];
vetor[j]=vetor[j+1];
vetor[j+1]=aux;
}
}
}
//mostrar o vetor
printf ("\n");
for (i=0;i<MAX;i++)
printf ("%d ",vetor[i]);
return 0;
}
2
Ordenação Inserção
#include <stdio.h>
#define MAX 10
int main()
{
int vetor[MAX],i,j,aux;
//preencher o vetor
for (i=0;i<MAX;i++)
scanf ("%d",&vetor[i]);
//ordenar o vetor
for (i=1;i<=MAX-1;i++)
{
aux = vetor[i];
j=i-1;
while ((j>=0) && (aux<vetor[j]))
{
vetor[j+1] = vetor[j];
j--;
}
vetor[j+1]=aux;
}
//mostrar o vetor
printf ("\n");
for (i=0;i<MAX;i++)
printf ("%d ",vetor[i]);
return 0;
}
int A[MAX],B[MAX];
void mergesort(int begin, int end);
int main()
{
int i;
//preencher o vetor
for (i=0;i<MAX;i++)
scanf ("%d",&A[i]);
//ordenar o vetor
mergesort(0,MAX-1);
3
//mostrar o vetor
printf ("\n");
for (i=0;i<MAX;i++)
printf ("%d ",A[i]);
return 0;
}
if(begin == end)
return;
mergesort(begin,middle);
mergesort(middle + 1,end);
left = begin;
right = middle + 1;
4
Ordenação Seleção Direta
#include <stdio.h>
#define MAX 10
int main()
{
int vetor[MAX],i,j,aux;
//preencher o vetor
for (i=0;i<MAX;i++)
scanf ("%d",&vetor[i]);
//ordenar o vetor
for (i=0;i<=MAX-2;i++)
{
for (j=i+1;j<=MAX-1;j++)
{
if (vetor[i] > vetor[j])
{
aux = vetor[i];
vetor[i]=vetor[j];
vetor[j]=aux;
}
}
}
//mostrar o vetor
printf ("\n");
for (i=0;i<MAX;i++)
printf ("%d ",vetor[i]);
return 0;
}
5
Ordenação Quick Sort
#include <stdio.h>
int main ()
{
int n;
scanf ("%d",&n);
int votos[n];
for (i=0;i<n;i++)
scanf ("%d",&votos[i]);
for (i=0;i<n;i++)
printf ("%d",votos[i]);
return 0;
}
void printarray(void);
int compare(struct animal *, struct animal *);
6
void main(void)
{
printf("List before sorting:\n");
printarray();
else
return 0;
}
void printarray(void)
{
int i;
7
Recursividade
Fatorial
#include <stdio.h>
int main ()
{
int n;
printf ("Digite um numero: ");
scanf ("%d",&n);
printf ("Fatorial de %d %c: %d",n,130,fat(n));
return 0;
}
Soma
#include <stdio.h>
int main ()
{
int n;
printf ("Digite um numero: ");
scanf ("%d",&n);
printf ("A soma de 0 a %d %c: %d",n,130,soma(n));
return 0;
}
8
Fim de Arquivo
int main ()
{
char palavra[21] ; //declara a variavel
while (scanf ("%s",&palavra) != EOF)
{
//code
}
return 0;
}
int main()
{
unsigned long long int x = 1234567890123456789;
printf("The 64 bit number is: %I64d\n",x);
return 0;
}
818. Aeroporto
9
Problema: AERO
Tarefa
Como programador recém contratado pela ATAI você foi encarregado de escrever
um programa para determinar, a partir de uma listagem de aeroportos e vôos, qual
aeroporto possui maior probabilidade de congestionamento no futuro. Como
medida da probabilidade de congestionamento será utilizado neste estudo o
número total de vôos que chegam ou que partem de cada aeroporto.
Entrada
Saída
Para cada conjunto de teste da entrada seu programa deve produzir três linhas. A
primeira linha identifica o conjunto de teste, no formato “Teste n”, onde n é
numerado a partir de 1. A segunda linha deve conter o identificador do aeroporto
que possui maior tráfego aéreo. Caso mais de um aeroporto possua este valor
máximo, você deve listar todos estes aeroportos, em ordem crescente de
identificação, e separados por pelo menos um espaço em branco. A terceira linha
deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve
ser seguida rigorosamente.
Exemplo
Entrada:
5 7
1 3
2 1
3 2
3 4
4 5
3 5
2 5
3 5
1 3
10
1 2
3 2
1 2
2 1
0 0
Output:
Teste 1
3
Teste 2
1 2
Resolução
#include <stdio.h>
int main ()
{
int a, v, i, x, y, maior, teste=1;
scanf ("%d %d",&a,&v);
while (a!=0 && v!=0)
{
a = a+1;
maior = 0;
int destino[a];
for (i=0;i<a;i++)
{
destino[i] = 0;
}
for (i=0;i<v;i++)
{
scanf ("%d %d",&x,&y);
destino[x] += 1;
destino[y] += 1;
}
for (i=0;i<a;i++)
{
if (destino[i] > maior)
maior = destino[i];
}
printf ("Teste %d\n",teste);
teste++;
for (i=0;i<a;i++)
{
if (destino[i] == maior)
printf ("%d ",i);
}
printf ("\n\n");
scanf ("%d %d",&a,&v);
}
return 0;
}
11
5474. Alarme Despertador
Problema: ALADES
Recentemente ela ganhou de presente um relógio digital, com alarme com vários
tons, e tem esperança que isso resolva o seu problema. No entanto, ela anda muito
cansada e quer aproveitar cada momento de descanso. Por isso, carrega seu
relógio digital despertador para todos os lugares, e sempre que tem um tempo de
descanso procura dormir, programando o alarme despertador para a hora em que
tem que acordar. No entanto, com tanta ansiedade para dormir, acaba tendo
dificuldades para adormecer e aproveitar o descanso.
Entrada
A entrada contém vários casos de teste. Cada caso de teste é descrito em uma
linha, contendo quatro números inteiros H1, M1, H2 e M2, com H1:M1
representando a hora e minuto atuais, e H2:M2 representando a hora e minuto
para os quais o alarme despertador foi programado (0≤H1≤23, 0≤M1≤59,
0≤H2≤23, 0≤M2 ≤59).
O final da entrada é indicado por uma linha que contém apenas quatro zeros,
separados por espaços em branco.
Saída
Para cada caso de teste da entrada seu programa deve imprimir uma linha, cada
uma contendo um número inteiro, indicando o número de minutos que Daniela tem
para dormir.
Exemplo
Entrada:
1 5 3 5
23 59 0 34
21 33 21 10
0 0 0 0
Saída:
12
120
35
1417
Restrições
Resolução
#include <stdio.h>
int main ()
{
int h1, m1, h2, m2, time;
while (scanf("%d %d %d %d",&h1,&m1,&h2,&m2))
{
if (!h1 && !m1 && !h2 && !m2)
return 0;
else
{
if ((h1==h2) && (m1==m2))
time=0;
else if ((h1==h2) && (m1<m2))
time=m2-m1;
else if ((h1==h2) && (m1>m2))
time=1440-(m1-m2);
else if ((h1<h2) && (m1<m2))
time=((h2-h1)*60)+(m2-m1);
else if ((h1<h2) && (m1>m2))
time=((h2-h1)*60)-(m1-m2);
else if ((h1<h2) && (m1==m2))
time=(h2-h1)*60;
else if ((h1>h2) && (m1<m2))
time=((24-h1)*60)+(h2*60)+(m2-m1);
else if ((h1>h2) && (m1>m2))
time=((24-h1)*60)+(h2*60)-(m1-m2);
else if ((h1>h2) &&(m1==m2))
time=((24-h1)*60)+(h2*60);
printf ("%d\n",time);
}
}
return 0;
}
13
1386. Bafo
Problema: BAFO
Aldo e Beto estão jogando bafo com todas as suas figurinhas e pediram sua ajuda
para calcular quem é o vencedor.
Tarefa
Você deve escrever um programa que, dada a quantidade de figurinhas que Aldo e
Beto viraram em cada rodada, determine qual dos dois é o vencedor.
Entrada
Saída
Para cada caso de teste da entrada, seu programa deve produzir três linhas na
saída. A primeira linha deve conter um identificador do caso de teste, no formato
“Teste n”, onde n é numerado seqüencialmente a partir de 1. A segunda linha deve
conter o nome do vencedor (Aldo ou Beto). A terceira linha deve ser deixada em
branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida
rigorosamente.
Exemplo
Entrada:
2
1 5
2 3
3
0 0
4 7
10 0
0
14
Saída:
Teste 1
Beto
Teste 2
Aldo
Restrições
Resolução
#include <stdio.h>
int main ()
{
int n, i, teste = 1, conta = 0, contb = 0;
scanf("%d",&n);
while (n!=0)
{
int a[n], b[n];
for (i=0;i<n;i++)
{
scanf ("%d %d",&a[i],&b[i]);
conta = conta + a[i];
contb = contb + b[i];
}
printf ("Teste %d\n", teste);
teste++;
if (contb > conta)
printf ("Beto\n");
else
printf ("Aldo\n");
printf ("\n");
conta = 0;
contb = 0;
scanf("%d",&n);
}
return 0;
}
15
812. Bits Trocados
Problema: BIT
Tarefa
Os caixas eletrônicos das Ilhas Weblands operam com todos os tipos de notas
disponíveis, mantendo um estoque de cédulas para cada valor (B$ 50,00, B$10,00,
B$5,00 e B$1,00). Os clientes do banco utilizam os caixas eletrônicos para efetuar
retiradas de um certo número inteiro de Bits.
Sua tarefa é escrever um programa que, dado o valor de Bits desejado pelo cliente,
determine o número de cada uma das notas necessário para totalizar esse valor, de
modo a minimizar a quantidade de cédulas entregues. Por exemplo, se o cliente
deseja retirar B$50,00, basta entregar uma única nota de cinquenta Bits. Se o
cliente deseja retirar B$72,00, é necessário entregar uma nota de B$50,00, duas
de B$10,00 e duas de B$1,00.
Entrada
Saída
Para cada conjunto de teste da entrada seu programa deve produzir três linhas na
saída. A primeira linha deve conter um identificador do conjunto de teste, no
formato “Teste n”, onde n é numerado a partir de 1. Na segunda linha devem
aparecer quatro inteiros I, J, K e L que representam o resultado encontrado pelo
seu programa: I indica o número de cédulas de B$50,00, J indica o número de
cédulas de B$10,00, K indica o número de cédulas de B$5,00 e L indica o número
de cédulas de B$1,00. A terceira linha deve ser deixada em branco. A grafia
mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente.
Exemplo
Entrada:
1
72
0
Saída:
Teste 1
0 0 0 1
Teste 2
1 2 0 2
16
Restrições
Resolução
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int valor=1,i,j,k,l,teste=1;
while (valor!= 0)
{
scanf("%d",&valor);
if(valor != 0)
{
i = valor/50;
valor = valor - (i*50);
j = valor/10;
valor = valor - (j*10);
k = valor/5;
valor = valor - (k*5);
l = valor/1;
valor = valor - (l*1);
printf("Teste %d\n",teste);
printf("%d %d %d %d",i,j,k,l);
printf("\n\n");
teste++;
valor = 1;
}
}
system ("PAUSE");
return 0;
}
17
1334. Calculando
Problema: CALCULA
Tarefa
Sua tarefa é escrever um programa que faça com que o computador opere como
uma calculadora simples. O seu programa deve ler expressões aritméticas e
produzir como saída o valor dessas expressões, como uma calculadora faria. O
programa deve implementar apenas um subconjunto reduzido das operações
disponíveis em uma calculadora: somas e subtrações.
Entrada
onde
Exemplo de Entrada
3
3+7-22
3
5-10-77
10
1+2+3+4+5+6+7+8+9+10
0
Saída
Para cada conjunto de testes da entrada seu programa deve produzir três linhas. A
primeira linha deve conter um identificador da expressão, no formato "Teste n",
onde n é numerado a partir de 1. Na segunda linha deve aparecer o resultado
encontrado pelo seu programa. A terceira linha deve ser deixada em branco. A
grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente.
Exemplo de Saída
18
Teste 1
-12
Teste 2
-82
Teste 3
55
Restrições
1 ≤ m ≤ 100
0 ≤ Xi ≤ 100 para todo 1 ≤ i ≤ m
Resolução
#include <stdio.h>
int main ()
{
int num, m, total, i, teste = 1;
scanf("%d",&m);
while (m!=0)
{
total = 0;
for (i=0;i<m;i++)
{
scanf("%d",&num);
total = total+num;
}
printf ("Teste %d\n",teste);
teste++;
printf("%d\n\n",total);
scanf ("%d",&m);
}
return 0;
}
19
1850. Conte os Fatores
Problema: CFATORES
Entrada
A entrada consistirá de uma série de inteiros positivos. Cada linha possui somente
um número. O valor máximo de um número é 1000000. O fim da entrada é indicado
por um número igual a 0. Esse número não deve ser considerado como parte do
conjunto de teste.
Saída
Exemplo
Entada:
289384
930887
692778
636916
747794
238336
885387
760493
516650
641422
0
Saída:
289384 : 3
930887 : 2
692778 : 5
636916 : 4
747794 : 3
238336 : 3
885387 : 2
760493 : 2
516650 : 3
641422 : 3
20
Resolução
#include <stdio.h>
int main ()
{
int val,j,n,i,nprimo,achei,count;
while (scanf("%d",&n) && n!=0)
{
nprimo=0;
achei=0;
val=n;
i=1;
while (n!=1)
{
if ((n%i==0) && i>1)
{
n/=i;
if (achei)
{
nprimo++;
achei=0;
}
}
else
{
i++;
achei=1;
}
}
printf ("%d : %d\n",val,nprimo);
}
return 0;
}
21
8707. Chamada
Problema: CHAMADA1
Tia Joana é uma respeitada professora e tem vários alunos. Em sua última aula, ela
prometeu que iria sortear um aluno para ganhar um bônus especial na nota final:
ela colocou N pedaços de papel numerados de 1 a N em um saquinho e sorteou um
determinado número K; o aluno premiado foi o K-ésimo aluno na lista de chamada.
O problema é que a Tia Joana esqueceu o diário de classe, então ela não tem como
saber qual número corresponde a qual aluno. Ela sabe os nomes de todos os
alunos, e que os números deles, de 1 até N, são atribuídos de acordo com a ordem
alfabética, mas os alunos dela estão muito ansiosos e querem logo saber quem foi
o vencedor.
Dado os nomes dos alunos da Tia Joana e o número sorteado, determine o nome
do aluno que deve receber o bônus.
Tarefa
Dado os nomes dos alunos da Tia Joana e o número sorteado, determine o nome
do aluno que deve receber o bônus.
Entrada
Saída
Seu programa deve imprimir uma única linha, contendo o nome do aluno que deve
receber o bônus
Exemplo
Entrada
5 1
maria
joao
carlos
vanessa
jose
Saída
carlos
Entrada
5 5
maria
joao
22
carlos
vanessa
jose
Saída
vanessa
Entrada
5 3
maria
joao
carlos
vanessa
jose
Saída
jose
Resolução
#include <stdio.h>
int main ()
{
int i,j,n,k;
scanf ("%d %d",&n,&k);
char nomes[n][22],temp[22];
for (i=0;i<n;i++)
scanf ("%s",&nomes[i]);
for(i = 1; i < n; i++)
for (j = 0; j < n -1 ; j++)
if(strcmp(nomes[j],nomes[j+1]) > 0)
{
strcpy(temp,nomes[j]);
strcpy(nomes[j],nomes[j+1]);
strcpy(nomes[j+1],temp);
}
printf ("%s",nomes[k-1]);
return 0;
}
23
840. Cofrinhos da Vó Vitória
Problema: COFRE
Ela sempre foi muito zelosa quanto à distribuição igualitária do troco arrecadado.
Quando, por força do valor das moedas, ela não consegue depositar a mesma
quantia nos dois cofrinhos, ela memoriza a diferença de forma a compensá-la no
próximo depósito.
Tarefa
Vó Vitória está ficando velha e tem medo que deslizes de memória a façam cometer
injustiças com os netos, deixando de compensar as diferenças entre os cofrinhos.
Sua tarefa é ajudar Vó Vitória, escrevendo um programa de computador que
indique as diferenças entre os depósitos, de forma que ela não tenha que
preocupar-se em memorizá-las.
Entrada
Saída
Para cada conjunto de teste da entrada seu programa deve produzir um conjunto
de linhas na saída. A primeira linha deve conter um identificador do conjunto de
teste, no formato “Teste n”, onde n é numerado seqüencialmente a partir de 1. A
seguir seu programa deve escrever uma linha para cada depósito do conjunto de
testes. Cada linha deve conter um inteiro que representa a diferença (em centavos)
entre o valor depositado nos cofrinhos do Joãozinho e do Zezinho. Deixe uma linha
em branco ao final de cada conjunto de teste. A grafia mostrada no Exemplo de
Saída, abaixo, deve ser seguida rigorosamente.
Exemplo
Entrada:
3
20 25
10 5
10 10
4
0 5
24
12 0
0 20
17 1
0
Saída:
Teste 1
-5
0
0
Teste 2
-5
7
-13
3
Restrições
Resolução
#include <stdio.h>
int main ()
{
int n=1, i, teste = 1;;
while (n!=0)
{
scanf ("%d",&n);
if (n!=0)
{
int j[n], z[n], saldo[n];
saldo[0] = 0;
for (i=0;i<n;i++)
scanf ("%d %d",&j[i],&z[i]);
printf ("Teste %d\n", teste);
teste++;
for (i=0;i<n;i++)
{
if (i==0)
saldo[i] = (j[i]-z[i]);
else
saldo[i] = saldo[i-1]+(j[i]-z[i]);
printf ("%d\n", saldo[i]);
}
printf ("\n");
}
}
return 0;
25
}
8777. Cometa
Problema: COMETA2
Tarefa
Escreva um programa que, dado o ano atual, determina qual o próximo ano em que
o cometa Halley será visível novamente do planeta Terra. Se o ano atual é um ano
de passagem do cometa, considere que o cometa já passou nesse ano (ou seja,
considere sempre o próximo ano de passagem, não considerando o ano atual).
Entrada
Saída
Seu programa deve imprimir uma única linha, contendo um número inteiro,
indicando o próximo ano em que o cometa Halley será visível novamente do
planeta Terra.
Exemplo
Entrada
2010
Saída
2062
Entrada
10000
Saída
10042
Entrada
2062
Saída
2138
26
Resolução
#include <stdio.h>
int main ()
{
int a,ano=1986;
scanf ("%d",&a);
while (ano<=a)
{
ano+=76;
}
printf ("%d",ano);
return 0;
}
27
8703. Conta de água
Problema: CONTA1
Para incentivar mais ainda a economia de água, a SBC alterou os preços de seu
fornecimento de forma que, proporcionalmente, aqueles clientes que consumirem
menos água paguem menos pelo metro cúbico. Todo cliente paga mensalmente
uma assinatura de R$ 7, que inclui uma franquia de 10 m³ de água. Isto é, para
qualquer consumo entre 0 e 10 m³ , o consumidor paga a mesma quantia de R$ 7
reais (note que o valor da assinatura deve ser pago mesmo que o consumidor não
tenha consumido água). Acima de 10 m³ cada metro cúbico subsequente tem um
valor diferente, dependendo da faixa de consumo. A SBC cobra apenas por
quantidades inteiras de metros cúbicos consumidos. A tabela abaixo especifica o
preço por metro cúbico para cada faixa de consumo:
Tarefa
Entrada
Saída
Seu programa deve imprimir uma única linha, contendo o valor da conta de água
daquela residência.
28
Exemplo
Entrada
8
Saída
7
Entrada
14
Saída
11
Entrada
42
Saída
51
Resolução
#include <stdio.h>
int main ()
{
int n, i, total=7;
scanf ("%d",&n);
for (i=0;i<=n;i++)
{
if (i>=11 && i<=30)
total+=1;
else if (i>=31 && i<=100)
total+=2;
else if (i>=101)
total+=5;
}
printf ("%d",total);
return 0;
}
29
1735. Não é Mais um Joguinho Canadense
Problema: CONTAGEM
A brincadeira começa com uma das crianças desenhando um diagrama com estados
(representados por bolinhas) ligados por transições (flechas ligando os estados).
Cada transição tem uma letra e um número associados. Podemos fazer diversos
passeios neste diagrama, partindo de um estado inicio caminhando por suas
transições e terminando em um estado final. Um passeio forma uma palavra
(obtida da concatenação das letras das transições percorridas) e tem um custo (que
é dado pelo produto dos números destas transições).
O passeio que segue pelas transições (p,1a), (p,1a), (p,1b), (q,2b) e termina
no estado q forma a palavra aabb e tem custo 2.
Entrada
30
A entrada termina com final de arquivo.
Saída
Exemplo
Entrada:
a
b
ab
ba
aaaa
bbbb
aabb
abbb
Saída:
Palavra 1
0
Palavra 2
1
Palavra 3
1
Palavra 4
2
Palavra 5
0
Palavra 6
15
Palavra 7
3
Palavra 8
7
31
Resolução
#include <iostream.h>
#include <math.h>
#include <string.h>
int main()
{
int i, tamanho, palavra=1,potencia;
unsigned long long int resultado=0;
char nome[62];
while (cin >> nome)
{
tamanho=strlen(nome);
for(i=0;i<tamanho;i++)
{
if(nome[i]=='b')
{
resultado += (1ll << ( tamanho-i ));
}
}
resultado /= 2;
cout << "Palavra " << palavra++ << "\n" << resultado << "\n\n";
resultado=0;
}
return 0;
}
32
8704. Copa do mundo
Problema: COPA1
Este ano tem Copa do Mundo! O país inteiro se prepara para torcer para a equipe
canarinho conquistar mais um título, tornando-se hexacampeã.
Tarefa
Dados os resultados dos quinze jogos da Fase final, escreva um programa que
determine a equipe campeã.
Entrada
Saída
33
Seu programa deve imprimir uma única linha, contendo a letra identificadora da
equipe campeã.
Exemplo
Entrada
4 1
1 0
0 4
3 1
2 3
1 2
2 0
0 2
1 2
4 3
0 1
3 2
3 4
1 4
1 0
Saída
F
Entrada
2 0
1 0
2 1
1 0
1 0
1 2
1 2
1 0
2 1
1 0
0 1
0 2
2 1
1 0
2 1
Saída
A
34
Resolução
#include <stdio.h>
int main ()
{
int i, j, m, n, count=0, campeao=0;
int vet[16];
for (i=0;i<16;i++)
vet[i]=0;
for (i=0;i<8;i++)
{
scanf ("%d %d",&m,&n);
if (m>n)
{
vet[count]=1;
count+=2;
}
else
{
count++;
vet[count]=1;
count++;
}
}
35
vet[j]++;
}
}
else
{
for(j=6;j<8;j++)
{
if(vet[j]==1)
vet[j]++;
}
}
36
{
if (vet[i]==2)
vet[i]++;
}
}
else
{
for (i=4;i<8;i++)
{
if (vet[i]==2)
vet[i]++;
}
}
37
}
}
}
if (campeao==0)
printf ("A");
else if (campeao==1)
printf ("B");
else if (campeao==2)
printf ("C");
else if (campeao==3)
printf ("D");
else if (campeao==4)
printf ("E");
else if (campeao==5)
printf ("F");
else if (campeao==6)
printf ("G");
else if (campeao==7)
printf ("H");
else if (campeao==8)
printf ("I");
else if (campeao==9)
printf ("J");
else if (campeao==10)
printf ("K");
else if (campeao==11)
printf ("L");
else if (campeao==12)
printf ("M");
else if (campeao==13)
printf ("N");
else if (campeao==14)
printf ("O");
else if (campeao==15)
printf ("P");
return 0;
}
38
3240. Dama
Problema: DAMA
O jogo de xadrez possui várias peças com movimentos curiosos: uma delas é 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
abaixo:
Kary achou a solução para alguns desses problemas, mas teve dificuldade com
outros, e por isso pediu que você escrevesse um programa que resolve esse tipo de
problema.
Entrada
A entrada contem vários casos de teste. A primeira e única linha de cada caso de
teste contém quatro inteiros X1, Y1 , X2 e Y2 (1 <= X1 , Y1 , X2 , Y2 <= 8).
A dama começa na casa de coordenadas (X1 , Y1), e a casa de destino é a casa de
coordenadas (X2 , Y2). No tabuleiro, as colunas são numeradas da esquerda para
a direita de 1 a 8 e as linhas de cima para baixo também de 1 a 8. As coordenadas
de uma casa na linha X e coluna Y são (X, Y).
Saída
Para cada caso de teste da entrada seu programa deve imprimir uma unica linha na
saída, contendo um número inteiro, indicando o menor número de movimentos
necessários para a dama chegar em sua casa de destino.
Exemplo
Entrada
4 4 6 2
39
3 5 3 5
5 5 4 3
0 0 0 0
Saída
1
0
2
Resolução
#include<stdio.h>
int main()
{
int x1,y1,x2,y2,mov=0;
while(scanf("%d %d %d %d",&x1,&y1,&x2,&y2) && x1!=0 && y1!=0 && x2!=0 && y2!=0)
{
if(x1==x2&&y1==y2)
mov=0;
else if(x1==x2||y1==y2)
mov=1;
else if((x1-x2==y1-y2) || (x1-x2==y2-y1) || (x2-x1==y1-y2) || (x2-x1==y2-y1))
mov=1;
else
mov=2;
printf ("%d\n",mov);
}
return 0;
}
40
817. Dobradura
Problema: DOBRA
Tarefa
Zezinho lançou então um desafio aos seus colegas: quem adivinha quantos pedaços
de papel foram produzidos?
Entrada
Saída
Para cada conjunto de teste da entrada seu programa deve produzir três linhas na
saída. A primeira linha deve conter um identificador do conjunto de teste, no
formato “Teste n”, onde n é numerado a partir de 1. A segunda linha deve conter o
número de pedaços de papel obtidos depois de cortar a dobradura, calculado pelo
41
seu programa. A terceira linha deve ser deixada em branco. A grafia mostrada no
Exemplo de Saída, abaixo, deve ser seguida rigorosamente.
Exemplo
Entrada:
1
0
-1
Saída:
Teste 1
9
Teste 2
4
Restrições
Resolução
#include <stdio.h>
#include <math.h>
int main ()
{
int n, d, teste = 1;
scanf ("%d",&n);
while (n!=-1)
{
d = (pow(2,n))+1;
d = d*d;
printf ("Teste %d\n",teste++);
printf ("%d\n\n",d);
scanf ("%d",&n);
}
return 0;
}
3773. Eleições
42
Problema: ELEICOES
Devido a essa nova regra, houve uma quantidade muito grande de candidatos à
prefeitura. O software da comissão eleitoral de Piraporinha do Sul não estava
preparado para isso, e por isso você foi contratado para escrever um programa
que, dados os votos lançados pelos habitantes da cidade, decide qual candidato
ganhou.
Entrada
Saída
Para cada conjunto de teste da entrada seu programa deve produzir uma única
linha, contendo o número do candidato que venceu (aquele que obteve mais
votos). Você pode supor que existe apenas um vencedor.
Restrições
1 ≤ N ≤ 100000
1 < Xi ≤ 1000000000
Exemplo
Entrada
5
1000
1000
2588
4000
2587
Saída
1000
Entrada
4
4000
3500
4000
4000
43
Saída
4000
Resolução
#include <stdio.h>
int main ()
{
int n, i, cont=0, max=0, ganhador=0;
scanf ("%d",&n);
int votos[n];
for (i=0;i<n;i++)
scanf ("%d",&votos[i]);
cont = 0;
for (i=0;i<n-1;i++)
{
if (votos[i]==votos[i+1])
{
cont++;
if (cont>max)
{
max = cont;
ganhador = votos[i];
}
}
else
cont=0;
}
printf ("%d",ganhador);
return 0;
}
8778. Elevador
44
Problema: ELEVADO2
Tarefa
Entrada
Saída
Seu programa deve imprimir uma única linha contendo o caractere 'S', caso a
capacidade do elevador tenha sido excedida em algum momento, ou o caractere 'N'
caso contrário.
Exemplo
Entrada
5 10
0 5
2 7
3 3
5 2
7 0
Saída
N
45
Entrada
5 10
0 3
0 5
0 2
3 4
6 4
Saída
S
Entrada
6 4
0 5
3 5
4 5
1 0
1 1
1 1
Saída
S
Resolução
#include <stdio.h>
int main()
{
int n, c, e, s, i, total=0, verif=0;
scanf ("%d %d",&n,&c);
{
for (i=0;i<n;i++)
{
scanf ("%d %d",&s,&e);
total=(total-s)+e;
if (total>c)
verif=1;
}
}
if (verif)
printf("S");
else
printf("N");
return 0;
}
46
2280. Encontre o telefone
Problema: ENCOTEL
Letras Número
ABC 2
DEF 3
GHI 4
JKL 5
MNO 6
PQRS 7
TUV 8
WXYZ 9
Entrada
Saída
Exemplo
Entrada:
1-HOME-SWEET-HOME
MY-MISERABLE-JOB
Saída:
1-4663-79338-4663
69-647372253-562
Resolução
47
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char tel[31];
int i,tam;
while (scanf ("%s",&tel) != EOF)
{
i=0;
tam=strlen(tel);
while(i<tam)
{
if(tel[i]=='1')
printf ("1");
else if(tel[i]=='-')
printf ("-");
else if(tel[i]=='0')
printf ("0");
else if((tel[i]=='A') || (tel[i]=='B') || (tel[i]=='C'))
printf ("2");
else if((tel[i]=='D') || (tel[i]=='E') || (tel[i]=='F'))
printf ("3");
else if((tel[i]=='G') || (tel[i]=='H') || (tel[i]=='I'))
printf ("4");
else if((tel[i]=='J') || (tel[i]=='K') || (tel[i]=='L'))
printf ("5");
else if((tel[i]=='M') || (tel[i]=='N') || (tel[i]=='O'))
printf ("6");
else if((tel[i]=='P') || (tel[i]=='Q') || (tel[i]=='R') || (tel[i]=='S'))
printf ("7");
else if((tel[i]=='T') || (tel[i]=='U') || (tel[i]=='V'))
printf ("8");
else if((tel[i]=='W') || (tel[i]=='X') || (tel[i]=='Y') || (tel[i]=='Z'))
printf ("9");
i++;
}
printf("\n");
}
}
48
841. Estágio
Problema: ESTAGIO
Como você pode verificar, o programa na forma atual tem uma imperfeição: no
caso de haver alunos empatados com a melhor média na turma, ele imprime
apenas o primeiro aluno que aparece na lista.
Tarefa
Dona Vilma deseja que você altere o programa para que ele produza uma lista com
todos os alunos da turma que obtiveram a maior média, e não apenas um deles.
Você consegue ajudá-la nesta tarefa?
Entrada
Saída
Para cada turma da entrada seu programa deve produzir três linhas na saída. A
primeira linha deve conter um identificador do conjunto de teste, no formato
“Turma n”, onde n é numerado a partir de 1. A segunda linha deve conter os
códigos dos alunos que obtiveram a maior média da turma. Os códigos dos alunos
devem aparecer na mesma ordem da entrada, e cada um deve ser seguido de um
espaço em branco. A terceira linha deve ser deixada em branco. O formato
mostrado no exemplo de saída abaixo deve ser seguido rigorosamente.
Exemplo
Entrada:
3
1 85
2 91
3 73
5
12300 81
12601 99
15023 76
10111 99
49
212 99
0
Saída:
Turma 1
2
Turma 2
12601 10111 212
Restrições
Resolução
#include <stdio.h>
#define MAX_ALUNOS 1000
int main()
{
int i, indice_melhor, n;
int turma=1;
struct
{
int codigo, media;
} alunos[MAX_ALUNOS];
/* le numero de alunos da primeira turma */
scanf("%d", &n);
while (n > 0)
{
/* le dados dos alunos */
for (i = 0; i < n; i++)
scanf("%d %d", &alunos[i].codigo, &alunos[i].media);
/* procura aluno de maior media */
indice_melhor = 0;
for (i = 0; i < n; i++)
if (alunos[i].media > indice_melhor)
indice_melhor = alunos[i].media;
/* escreve resposta */
printf("Turma %d\n",turma++);
for (i=0;i<n;i++)
{
if (alunos[i].media == indice_melhor)
printf("%d ",alunos[i].codigo);
}
printf ("\n\n");
/* le numero de alunos da proxima turma */
scanf("%d", &n);
}
return 0;
}
50
1831. f91
Problema: F91
Entrada
Saída
Exemplo
Entrada:
500
91
0
Saída:
f91(500) = 490
f91(91) = 91
Resolução
51
#include <stdio.h>
int f91(int n)
{
return n<=100 ? f91(f91(n+11)) : n-10;
}
int main()
{
int x;
return 0;
}
52
3774. Fatorial
Problema: FATORIA2
Entrada
Saída
Restrições
0 ≤ N ≤ 12
Exemplo
Entrada
Saída
Resolução
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, fat=1, i;
scanf ("%d",&n);
if (n != 0)
{
for (i=n;i>0;i--)
{
fat = fat*i;
}
printf ("%d",fat);
}
else
printf ("1");
return 0;
}
53
3742. Feynman
Problema: FEYNMAN
Richard Phillips Feynman era uma físico americando muito famoso e ganhador do
Prêmio Nobel de Física. Ele trabalhava em física teórica e também foi pioneiro no
campo da computação quântica. Ele visitou a América do Sul por dez meses, dando
palestras e aproveitando a vida nos trópicos. Ele também é conhecido pelos livros
"Surely You’re Joking, Mr. Feynman!" e "What Do You Care What Other People
Think?", que inclui algumas de suas aventuras abaixo do equador.
Sua paixão da vida inteira era resolver e criar quebra-cabeças, trancas e códigos.
Recentemente, um fazendeiro idoso da América do Sul, que hospedou o jovem
físico em 1949, achou alguns papéis e notas que acredita-se terem pertencido a
Feynman. Entre anotações sobre mesóns e eletromagnetismo, havia um
guardanapo onde ele escreveu um simples desafio: "quantos quadrados diferentes
existem em um quadriculado de N x N quadrados?".
Entrada
A entrada contém diversos casos de teste. Cada caso de teste é composto de uma
única linha, contendo apenas um inteiro N, representando o número de quadrados
em cada lado do quadriculado (1 <= N <= 100).
Saída
Para cada caso de teste na entrada, seu programa deve imprimir uma única linha,
contendo o número de diferentes quadrados para a entrada correspondente.
Exemplo de entrada
54
Saída para o exemplo de entrada
204
Resolução
#include <stdio.h>
int main ()
{
int n,total,i;
while ((scanf("%d",&n)) && n!=0)
{
total=0;
for (i=n;i>0;i--)
total+=i*i;
printf ("%d\n",total);
}
return 0;
}
55
3775. Fliperama
Problema: FLIPERAM
Escreva um programa que, dada a lista de todas as pontuações dos jogos de Bebe-
bebe, mostra os melhores placares em ordem decrescente.
Entrada
Saída
Restrições
1 ≤ N ≤ 10000
1 ≤ M ≤ 500
M ≤ N
Exemplo
Entrada
7 4
100
200
200
150
30
524
942
Saída
942
524
200
200
Entrada
2 1
4000
2000
Saída
4000
56
Resolução
#include <stdio.h>
int main ()
{
int n,m,i,j,aux;
scanf ("%d %d",&n,&m);
int flip[n];
for (i=0;i<n;i++)
scanf ("%d",&flip[i]);
for (i=0;i<n;i++)
{
for (j=0;j<n-1;j++)
{
if(flip[j]<flip[j+1])
{
aux = flip[j];
flip[j] = flip[j+1];
flip[j+1] = aux;
}
}
}
for (i=0;i<m;i++)
printf ("%d\n",flip[i]);
return 0;
}
57
2606. Frota de Táxi
Problema: FROTATAX
Tarefa
Você deve escrever um programa que, dados o preço do litro de álcool, o preço do
litro de gasolina e os quilômetros por litro que um carro bi-combustível realiza com
cada um desses combustíveis, determine se é mais econômico abastecer os carros
da CTT com álcool ou com gasolina. No caso de não haver diferença de custo entre
abastecer com álcool ou gasolina a CTT prefere utilizar gasolina.
Entrada
A entrada é composta por uma linha contendo quatro números reais com precisão
de duas casas decimais A, G, Ra e Rg , representando respectivamente o preço por
litro do álcool, o preço por litro da gasolina, o rendimento (km/l) do carro utilizando
álcool e o rendimento (km/l) do carro utilizando gasolina.
Saída
A saída deve ser composta por uma única linha contendo o caractere ‘A’ se é mais
econômico abastecer a frota com álcool ou o caractere ‘G’ se é mais econômico ou
indiferente abastecer a frota com gasolina.
Restrições
58
Resolução
#include <stdio.h>
int main ()
{
float a, g, ra, rg, totala, totalg;
scanf ("%f %f %f %f",&a,&g,&ra,&rg);
totala = ra/a;
totalg = rg/g;
if (totala > totalg)
printf ("A");
else
printf ("G");
return 0;
}
59
2928. Ele está impedido
Problema: IMPEDIDO
Entrada
O arquivo de entrada contém vários casos de teste. A primeira linha de cada caso
de teste contém dois inteiros A e D separados por um espaço indicando,
respectivamente, o número de jogadores atacantes e defensores envolvidos na
jogada (2 <= A, D <= 11). A próxima linha contém A inteiros Bi separados por um
espaço, indicando as distâncias dos jogadores atacantes até a linha do gol (1 <= Bi
<= 10^4 ). A próxima linha contém D inteiros Ci separados por um espaço,
indicando as distâncias dos defensores até a linha do gol (1 <= Ci <= 10^4). O
final da entrada é dado por A = D = 0.
Saída
Para cada caso de teste na entrada imprima uma linha contendo um único
caractere: “Y” (maiúsculo) se existe um jogador atacante impedido, e “N”
(maiúsculo) caso contrário.
Exemplo
Entrada
2 3
500 700
700 500 500
2 2
200 400
200 1000
3 4
530 510 490
480 470 50 310
0 0
Saída
N
60
Y
N
Resolução
#include <stdio.h>
int main ()
{
int a, d, i, minimo, cond, pos;
while ((scanf("%d %d",&a,&d)) && a!=0 && d!=0)
{
minimo=100000;
cond=0;
for (i=0;i<a;i++)
{
scanf("%d",&pos);
if (pos<minimo)
minimo=pos;
}
for (i=0;i<d;i++)
{
scanf("%d",&pos);
if (pos<=minimo)
cond++;
}
if (cond>=2)
printf ("N\n");
else
printf ("Y\n");
}
return 0;
}
61
8700. Escada
Problema: JESCADA
A nova escada rolante possui um sensor no início. Toda vez que ela está vazia e
alguém passa pelo sensor, a escada começa a funcionar, parando de funcionar
novamente após 10 segundos se ninguém mais passar pelo sensor. Estes 10
segundos representam o tempo suficiente para levar alguém de um nível ao outro.
Tarefa
Entrada
Saída
Seu programa deve imprimir uma única linha, contendo o tempo que a escada
rolante ficou ligada.
Exemplo
Entrada
3
0
10
20
Saída
30
Entrada
5
5
10
17
20
30
62
Saída
35
Entrada
3
1
2
3
Saída
12
Resolução
#include <stdio.h>
int main ()
{
int i,n,total=0;
scanf ("%d",&n);
int segundos[n];
if (n!=0)
total+=10;
for (i=0;i<n;i++)
{
scanf ("%d",&segundos[i]);
}
for (i=1;i<n;i++)
{
if(segundos[i]-10>=segundos[i-1])
total += 10;
else
total += segundos[i]-segundos[i-1];
}
printf ("%d",total);
return 0;
}
63
8698. Garçom
Problema: JGARCOM
Tarefa
Escreva um programa que, dado o número de latas e copos em cada bandeja que o
garçom tentou entregar, imprime o total de copos que ele quebrou.
Entrada
Saída
Seu programa deve imprimir uma única linha, contendo um único inteiro, indicando
o número total de copos que o garçom quebrou.
Exemplo
Entrada
3
10 5
6 8
3 3
Saída
5
Entrada
4
10 6
8 8
5 1
100 100
64
Saída
7
Resolução
#include <stdio.h>
int main ()
{
int i, c, l, n, total=0;
scanf ("%d",&n);
for (i=0;i<n;i++)
{
scanf ("%d %d",&l,&c);
if (l>c)
total+=c;
}
printf ("%d",total);
return 0;
}
65
8697. Pneu
Problema: JPNEU
Calibrar os pneus do carro deve ser uma tarefa cotidiana de todos os motoristas.
Para isto, os postos de gasolina possuem uma bomba de ar. A maioria das bombas
atuais são eletrônicas, permitindo que o motorista indique a pressão desejada num
teclado. Ao ser ligada ao pneu, a bomba primeiro lê a pressão atual e calcula a
diferença de pressão entre a desejada e a lida. Com esta diferença ela esvazia ou
enche o pneu para chegar na pressão correta.
Sua ajuda foi requisitada para desenvolver o programa da próxima bomba da SBC -
Sistemas de BombasComputadorizadas
Tarefa
Entrada
A primeira linha da entrada contém um inteiro N que indica a pressão desejada pelo
motorista (1 ≤ N ≤ 40). A segunda linha contém um inteiro M que indica a pressão
lida pela bomba (1 ≤ M ≤ 40).
Saída
Seu programa deve imprimir uma única linha, contendo a diferença entre a pressão
desejada e a pressão lida.
Exemplo
Entrada
30
18
Saída
12
Entrada
27
27
Saída
0
Entrada
27
30
Saída
-3
66
8697. Pneu
Problema: JPNEU
Calibrar os pneus do carro deve ser uma tarefa cotidiana de todos os motoristas.
Para isto, os postos de gasolina possuem uma bomba de ar. A maioria das bombas
atuais são eletrônicas, permitindo que o motorista indique a pressão desejada num
teclado. Ao ser ligada ao pneu, a bomba primeiro lê a pressão atual e calcula a
diferença de pressão entre a desejada e a lida. Com esta diferença ela esvazia ou
enche o pneu para chegar na pressão correta.
Sua ajuda foi requisitada para desenvolver o programa da próxima bomba da SBC -
Sistemas de BombasComputadorizadas
Tarefa
Entrada
A primeira linha da entrada contém um inteiro N que indica a pressão desejada pelo
motorista (1 ≤ N ≤ 40). A segunda linha contém um inteiro M que indica a pressão
lida pela bomba (1 ≤ M ≤ 40).
Saída
Seu programa deve imprimir uma única linha, contendo a diferença entre a pressão
desejada e a pressão lida.
Exemplo
Entrada
30
18
Saída
12
Entrada
27
27
Saída
0
Entrada
27
30
Saída
67
-3
Resolução
#include <stdio.h>
int main()
{
int desejada, lida, dif;
scanf ("%d %d",&desejada,&lida);
dif = desejada-lida;
printf ("%d",dif);
return 0;
}
68
8696. Sedex
Problema: JSEDEX
A Copa do Mundo de 2010 será realizada na áfrica do Sul. Bolas de futebol são
muito fáceis de transportar, já que elas saem das fábricas vazias e só são enchidas
somente pelas lojas ou pelos consumidores finais.
Infelizmente o mesmo não pode ser dito das bolas de boliche. Como elas são
completamente sólidas, elas só podem ser transportadas embaladas uma a uma,
em caixas separadas.
Tarefa
Entrada
Saída
Seu programa deve imprimir uma única linha, contendo a letra 'S' caso a bola de
boliche caiba dentro da caixa ou 'N' caso contrário
Exemplo
Entrada
3
3 2 5
Saída
N
Entrada
5
5 5 5
Saída
S
Entrada
9
15 9 10
69
Saída
S
Resolução
#include <stdio.h>
int main ()
{
int bola, alt, lar, prof;
scanf ("%d %d %d %d",&bola,&alt,&lar,&prof);
if (bola>alt || bola>lar || bola>prof)
printf ("N");
else
printf ("S");
return 0;
}
70
815. Temperatura Lunar
Problema: LUA
Tarefa
Você foi recentemente contratado pela NASA, e sua primeira tarefa é escrever um
programa que, conhecidos a seqüência de temperaturas medidas pelo sensor, e o
tamanho do intervalo desejado, informe qual a maior e qual a menor temperatura
média observadas, considerando o tamanho do intervalo dado.
Entrada
Saída
Para cada conjunto de teste da entrada seu programa deve produzir três linhas. A
primeira linha identifica o conjunto de teste, no formato “Teste n”, onde n é
numerado a partir de 1. A segunda linha deve conter dois números inteiros X e Y,
separados por ao menos um espaço em branco, representando respectivamente os
valores da menor e da maior média de temperatura, conforme determinado pelo
seu programa. O valor da média deve ser truncado, se a média não for um número
inteiro (ou seja, deve ser impressa apenas a parte inteira). A terceira linha deve ser
deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser
seguida rigorosamente.
Exemplo
71
Entrada:
4 2
-5
-12
0
6
7 4
35
-35
5
100
100
50
50
0 0
Saída:
Teste 1
-8 3
Teste 2
26 75
Restrições
72
Resolução
#include <stdio.h>
int main ()
{
int n, m, i, j, max, min, teste=1, media, soma;
scanf ("%d %d",&n,&m);
while (n!=0 && m!=0)
{
int temp[n];
soma = 0;
max = -200;
min = 200;
for (i=0;i<n;i++)
scanf ("%d",&temp[i]);
for (i=0;i<m;i++)
{
soma += temp[i];
}
media = soma/m;
if (media >= max)
max = media;
if (media <= min)
min = media;
for (i=0;i<(n-m);i++)
{
soma = (soma-temp[i])+temp[i+m];
media = soma/m;
if (media >= max)
max = media;
if (media <= min)
min = media;
}
73
1330. Meteoros
Problema: METEORO
Em noites sem nuvens pode-se muitas vezes observar pontos brilhantes no céu que
se deslocam com grande velocidade, e em poucos segundos desaparecem de vista:
são as chamadas estrelas cadentes, ou meteoros. Meteoros são na verdade
partículas de poeira de pequenas dimensões que, ao penetrar na atmosfera
terrestre, queimam-se rapidamente (normalmente a uma altura entre 60 120
quilômetros). Se os meteoros são suficientemente grandes, podem não queimar-se
completamente na atmosfera e dessa forma atingem a superfície terrestre: nesse
caso são chamados de meteoritos.
Tarefa
São dados:
As linhas que delimitam a fazenda são paralelas aos eixos cartesianos. Sua tarefa é
escrever um programa que determine quantos meteoritos caíram dentro da fazenda
(incluindo meteoritos que caíram exatamente sobre as linhas que delimitam a
fazenda).
Entrada
Seu programa deve ler vários conjuntos de testes. A primeira linha de um conjunto
de testes quatro números inteiros X1, Y1, X2 e Y2, onde (X1, Y1) é a coordenada
do canto superior esquerdo e (X2, Y2) é a coordenada do canto inferior direito do
retângulo que delimita a fazenda. A segunda linha contém um inteiro, N, que indica
o número de meteoritos. Seguem-se N linhas, cada uma contendo dois números
inteiros X e Y, correspondendo às coordenadas de cada meteorito. O final da
entrada é indicado por X1 = Y1 = X2 = Y2 = 0.
Exemplo de entrada
2 4 5 1
2
1 2
3 3
2 4 3 2
3
1 1
2 2
3 3
0 0 0 0
74
Saída
Para cada conjunto de teste da entrada seu programa deve produzir três linhas na
saída. A primeira linha deve conter um identificador do conjunto de teste, no
formato “Teste n”, onde n é numerado a partir de 1. A segunda linha deve conter o
número de meteoritos que caíram dentro da fazenda. A terceira linha deve ser
deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser
seguida rigorosamente.
Exemplo de saída
Teste 1
1
Teste 2
2
Restrições
0 ≤ N ≤ 10.000
0 ≤ X ≤ 10.000
0 ≤ Y ≤ 10.000
0 ≤ X1 < X2 ≤ 10.000
0 ≤ Y2 < Y1 ≤ 10.000
Resolução
#include <stdio.h>
int main ()
{
int x1=1, x2=1, y1=1, y2=1, n, i, cont = 0, teste = 1;
while (x1!=0, x2!=0, y1!=0, y2!=0)
{
scanf ("%d %d %d %d",&x1,&y1,&x2,&y2);
if (x1!=0, x2!=0, y1!=0, y2!=0)
{
scanf ("%d",&n);
int x[n], y[n];
for (i=0;i<n;i++)
scanf("%d %d",&x[i],&y[i]);
for (i=0;i<n;i++)
if (x[i] >= x1 && x[i] <= x2)
if (y[i] <= y1 && y[i] >= y2)
cont ++;
printf ("Teste %d\n%d\n\n",teste, cont);
teste++;
cont = 0;
}
}
return 0;
}
75
2607. Campo de Minhocas
Problema: MINHOCA
Minhocas são muito importantes para a agricultura e como insumo para produção
de ração animal. A Organização para Bioengenharia de Minhocas (OBM) é uma
entidade não governamental que promove o aumento da produção, utilização e
exportação de minhocas.
Decidiu-se então que seria efetuado um teste com a máquina, de forma a colher o
maior número possível de minhocas em uma unica passada, em linha reta, de lado
a lado do campo de minhocas. Ou seja, a máquina deve colher todas as minhocas
de uma ‘coluna’ ou de uma ‘linha’ de células do campo de minhocas (a linha ou
coluna cuja soma das produtividades esperadas das células é a maior possível).
Tarefa
Entrada
76
Saída
A saída deve ser composta por uma unica linha contendo um inteiro, indicando o
número esperado total de minhocas a serem colhidas pela máquina durante o teste.
Exemplo 1 Exemplo 2
Entrada:
Entrada:
4 1
3 4
100
81 28 240 10
110
40 10 100 240
0
20 180 110 35
100
Saída:
Saída:
450
310
Restrições
77
Resolução
#include <stdio.h>
int main ()
{
int n,m,i,j,max=0,soma;
scanf ("%d %d",&n,&m);
int mat[n][m];
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
scanf ("%d",&mat[i][j]);
}
for (i=0;i<n;i++)
{
soma = 0;
for (j=0;j<m;j++)
{
soma=soma+mat[i][j];
if (j == m-1)
{
if (soma > max)
max = soma;
}
}
}
for (i=0;i<m;i++)
{
soma = 0;
for (j=0;j<n;j++)
{
soma=soma+mat[j][i];
if (j == n-1)
{
if (soma > max)
max = soma;
}
}
}
printf ("%d",max);
return 0;
}
78
3826. Miojo
Problema: MIOJO
João é um fanático por miojos; ele os adora, e, como era de se esperar, ele levou
vários pacotes quando foi acampar com seus colegas. Como João só gosta de
miojos feitos com o tempo exato, ele se deseperou ao perceber que havia
esquecido seu relógio em casa.
Dessa forma, o miojo ficará 3 minutos no fogo (do minuto 7 ao minuto 10). Assim,
apesar do miojo levar apenas três minutos para ser cozido, ele precisa de 10
minutos para ficar pronto.
Faça um programa que, dado o tempo de preparo do miojo, e os tempos das duas
ampulhetas (ambos maiores que o tempo do miojo), determina o tempo mínimo
necessário para o miojo ficar pronto. Você pode supor que sempre é possível
cozinhar o miojo no tempo correto.
Entrada
A entrada contém um único caso de teste, composto por uma única linha, que
contém três inteiros T, A e B, representando o tempo necessário para o preparo do
miojo, o tempo da primeira ampulheta e o tempo da segunda ampulheta
respectivamente.
Saída
Seu programa deve produzir uma única linha na saída, contendo o tempo mínimo
para o preparo do miojo.
Restrições
0 ≤ T ≤ 10000
T < A, B ≤ 40000
Exemplo
Entrada
3 5 7
Saída
10
79
Entrada
14 15 22
Saída
44
Resolução
#include <stdio.h>
int main(void) {
int t, a, b, menor, maior, tempo = 0;
scanf("%d %d %d", &t, &menor, &maior);
a = maior;
b = menor;
while (1) {
if (a < b) {
tempo += a;
if (a == t)
break;
b -= a;
a = maior;
} else {
tempo += b;
if (b == t)
break;
a -= b;
b = menor;
}
}
printf("%d", tempo);
return 0;
}
80
3244. Divisão da Nlogônia
Problema: NLOGONIA
Ficou decidido que um ponto, denominado ponto divisor, cujas coordenadas foram
estabelecidas nas negociações, definiria a divisão do país da seguinte maneira.
Duas linhas, ambas contendo o ponto divisor, uma na direção norte-sul e uma na
direção leste-oeste, seriam traçadas no mapa, dividindo o país em quatro novos
países. Iniciando no quadrante mais ao norte e mais ao oeste, em sentido horário,
os novos países seriam chamados de Nlogônia do Noroeste, Nlogônia do Nordeste,
Nlogônia do Sudeste e Nlogônia do Sudoeste.
A ONU determinou que fosse disponibilizada uma página na Internet para que os
habitantes pudessem consultar em qual dos novos países suas residências estão, e
você foi contratado para ajudar a implementar o sistema.
Entrada
O final da entrada é indicado por uma linha que contém apenas o número zero.
81
Saída
Para cada caso de teste da entrada seu programa deve imprimir uma linha
contendo:
Exemplo
Entrada
3
2 1
10 10
-10 1
0 33
4
-1000 -1000
-1000 -1000
0 0
-2000 -10000
-999 -1001
0
Saída
NE
divisa
NO
divisa
NE
SO
SE
82
Resolução
#include <stdio.h>
int main ()
{
int k,x,y,i;
scanf ("%d",&k);
while (k!=0)
{
scanf("%d %d",&x,&y);
int x1[k],y1[k];
for (i=0;i<k;i++)
{
scanf ("%d %d",&x1[i],&y1[i]);
}
for (i=0;i<k;i++)
{
if((x1[i]==x) || (y1[i]==y))
printf("divisa\n");
if((x1[i]>x) && (y1[i]>y))
printf("NE\n");
if((x1[i]>x) && (y1[i]<y))
printf("SE\n");
if((x1[i]<x) && (y1[i]>y))
printf("NO\n");
if((x1[i]<x) && (y1[i]<y))
printf("SO\n");
}
scanf("%d",&k);
}
return 0;
}
83
842. Torres de Hanói
Problema: OBIHANOI
Cada pino pode conter uma pilha com qualquer número de discos, desde que cada
disco não seja colocado acima de outro disco de menor tamanho. A configuração
inicial consiste de todos os discos no pino 1. O objetivo do quebra-cabeças é mover
todos os discos para um dos outros pinos, sempre obedecendo à restrição de não
colocar um disco sobre outro menor.
Tarefa
Entrada
A entrada possui vários conjuntos de teste. Cada conjunto de teste é composto por
uma única linha, que contém um único número inteiro N (0 <= N <= 30), indicando
o número de discos. O final da entrada é indicado por N = 0.
Saída
Para cada conjunto de teste, o seu programa deve escrever três linhas na saída. A
primeira linha deve conter um identificador do conjunto de teste, no formato “Teste
n”, onde n é numerado seqüencialmente a partir de 1. A segunda linha deve conter
o número de movimentos que são executados pelo algoritmo dado para resolver o
84
problema das Torres de Hanói com N discos. A terceira linha deve ser deixada em
branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida
rigorosamente.
Exemplo
Entrada:
1
2
0
Saída
Teste 1
1
Teste 2
3
Restrições
Resolução
#include <stdio.h>
int main ()
{
int n,mov,teste = 1;
scanf("%d",&n);
while (n!=0)
{
mov = (pow(2,n))-1;
printf ("Teste %d\n",teste);
teste++;
printf ("%d \n\n",mov);
scanf ("%d",&n);
}
return 0;
}
1390. Mini-Poker
85
Problema: OBIPOKER
No início do jogo, cada jogador recebe cinco cartas. O conjunto de cinco cartas vale
um certo número de pontos, de acordo com as regras descritas abaixo.
Diferentemente do jogo de Poker normal, em Mini-Poker o naipe das cartas é
desconsiderado. Assim, para simplificar a descrição do jogo, vamos utilizar os
números de 1 a 13 para identificar as cartas do baralho, na ordem dada acima.
Uma outra diferença é que pode ocorrer empate entre mais de um vencedor; nesse
caso os vencedores dividem o prêmio.
2. Se há quatro cartas iguais x (uma quadra, ou seja, os valores das cartas são x,
x, x, x e y), a pontuação é x+180 pontos. Por exemplo, se as cartas recebidas são
1, 1, 1, 10 e 1, a pontuação é 181 pontos.
3. Se há três cartas iguais x e duas outras cartas iguais y (uma trinca e um par, ou
seja, os valores das cartas são x, x, x, y e y), a pontuação é x + 160 pontos. Por
exemplo, se as cartas recebidas são 10, 4, 4, 10 e 4, a pontuação é 164 pontos.
6. Se há apenas duas cartas iguais x e as outras são todas distintas (um par, ou
seja, os valores das cartas são x, x, y, z e t), a pontuação é x pontos. Por exemplo,
se as cartas recebidas são 12, 13, 5, 8 e 13, a pontuação é 13 pontos.
Tafefa
Entrada
86
A entrada é composta por vários casos de teste, cada um correspondendo a uma
jogada. A primeira linha da entrada contém um inteiro N que indica o número de
casos de teste (1 <= N <= 100). Cada uma das N linhas seguintes contém cinco
números inteiros C1,C2,C3,C4 e C5, representando as cinco cartas recebidas por
um jogador (1 <= C1,C2,C3,C4,C5 <= 13).
Saída
Para cada caso de teste da entrada, seu programa deve produzir três linhas na
saída. A primeira linha deve conter um identificador do caso de teste, no formato
“Teste n”, onde n é numerado seqüencialmente a partir de 1. A segunda linha deve
conter a pontuação do jogador considerando as cinco cartas recebidas. A terceira
linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo,
deve ser seguida rigorosamente.
Exemplo
Entrada:
2
12 3 10 3 12
1 2 3 5 4
Saída:
Teste 1
62
Teste 2
201
Restrições
Resolução
#include<stdio.h>
#define n_cartas 5
int main()
{
int aux, carta[n_cartas],a,n,i,j,x=0,y=0,pontuacao,teste=1,achei;
scanf("%d",&n);
for (a=0;a<n;a++)
{
pontuacao = 0;
achei = 1;
for (i=0;i<n_cartas;i++)
{
scanf("%d",&carta[i]);
}
for (i=0;i<n_cartas;i++)
{
87
for(j=0;j<n_cartas-1;j++)
{
if (carta[j] > carta[j+1])
{
aux = carta[j];
carta[j] = carta[j+1];
carta[j+1] = aux;
}
}
}
for(i=0;i<n_cartas-1;i++) //Sequencia
{
if (carta[i+1]-carta[i] != 1)
{
achei=0;
i=n_cartas;
}
}
if(achei)
pontuacao = 200+carta[0];
else //Quadra
{
achei =0;
for(i=0;i<n_cartas-3;i++)
{
if ((carta[i]==carta[i+1]) && (carta[i+1]==carta[i+2]) && (carta[i+2]==carta[i+3]))
{
achei=1;
i=n_cartas;
}
}
if (achei)
pontuacao = 180+carta[2];
else //Full House
{
if((carta[0]==carta[1]) && carta[1]==carta[2] && carta[3]==carta[4])
achei=1;
else if ((carta[0]==carta[1]) && carta[2]==carta[3] && carta[3]==carta[4])
achei=1;
if(achei)
pontuacao=160+carta[2];
else //Trinca
{
for(i=0;i<n_cartas-2;i++)
{
if((carta[i]==carta[i+1]) && (carta[i+1]==carta[i+2]))
{
achei=1;
i=n_cartas;
}
}
if(achei)
88
pontuacao=140+carta[2];
else //Dois Pares
{
x=y=0;
for(i=0;i<n_cartas-1;i++)
{
if(carta[i]==carta[i+1])
{
y=x;
x=carta[i];
}
}
if (y)
pontuacao = (3*x)+(2*y)+20;
else //Par
{
for (i=0;i<n_cartas-1;i++)
{
if(carta[i]==carta[i+1])
{
achei=1;
x=i;
i=n_cartas;
}
}
if(achei)
pontuacao=carta[x];
}
}
}
}
}
printf("Teste %d\n%d\n\n",teste++,pontuacao);
}
return 0;
}
89
845. Tetris
Problema: OBITETRI
Tarefa
Entrada
Saída
Para cada conjunto de teste, o seu programa deve escrever uma linha contendo o
identificador do conjunto de teste, no formato “Teste n”, onde n é numerado
seqüencialmente a partir de 1. A seguir, o seu programa deve escrever a
classificação final no campeonato, utilizando uma linha para cada participante. Cada
linha deve conter três informações, separadas por um espaço em branco: a
classificação do jogador, a sua pontuação final, e o seu nome. A classificação de um
jogador é igual a 1 mais o número de jogadores que obtiveram pontuação maior do
que a sua. Em caso de empate, os jogadores devem ser ordenados em ordem
alfabética. Depois de toda a classificação, deve ser deixada uma linha em branco. O
formato do exemplo de saída abaixo deve ser seguido rigorosamente.
Exemplo
Entrada:
4
Zezinho
100 123 133 333 400 300 129 200 360 340 200 600
Luizinho
60 50 120 250 170 190 190 220 260 270 290 300
Carlinhos
10 10 20 10 10 10 10 20 20 20 20 20
Joaozinho
200 300 400 400 500 500 500 600 650 650 700 810
3
Pedrinho
100 100 200 200 300 300 400 400 500 500 600 600
Huguinho
90
50 100 200 200 300 300 500 500 400 400 600 700
Zezinho
100 100 100 100 100 100 100 100 100 100 100 100
0
Saída:
Teste 1
1 5200 Joaozinho
2 2518 Zezinho
3 2020 Luizinho
4 150 Carlinhos
Teste 2
1 3500 Huguinho
1 3500 Pedrinho
3 1000 Zezinho
Restrições
Resolução
#include <stdio.h>
#include <string.h>
struct campeonato
{
char nome[17];
int pontos[12];
int soma;
int posicao;
};
int main ()
{
int j, i, k, min, max, teste = 1, aux, col, col2;
char aux2[17];
scanf("%d",&j);
while (j!= 0)
{
min = 1001;
max = -1;
struct campeonato tetris[j];
for (i=0;i<j;i++)
{
scanf ("%s",&tetris[i].nome);
scanf ("%d %d %d %d %d %d %d %d %d %d %d
%d",&tetris[i].pontos[0],&tetris[i].pontos[1],&tetris[i].pontos[2],&tetris[i].pontos[3],&tetris[i].
pontos[4],&tetris[i].pontos[5],&tetris[i].pontos[6],&tetris[i].pontos[7],&tetris[i].pontos[8],&tet
ris[i].pontos[9],&tetris[i].pontos[10],&tetris[i].pontos[11]);
91
}
for (i=0;i<j;i++)
{
min = 1001;
max = -1;
tetris[i].soma = 0;
for (k=0;k<12;k++)
{
tetris[i].soma += tetris[i].pontos[k];
if (tetris[i].pontos[k] < min)
min = tetris[i].pontos[k];
if (tetris[i].pontos[k] > max)
max = tetris[i].pontos[k];
if (k == 11)
tetris[i].soma -= (min+max);
}
}
for (i=0;i<j;i++)
{
for (k=0;k<j-1;k++)
{
if (tetris[k].soma < tetris[k+1].soma)
{
aux = tetris[k].soma;
tetris[k].soma = tetris[k+1].soma;
tetris[k+1].soma = aux;
strcpy (aux2,tetris[k].nome);
strcpy (tetris[k].nome,tetris[k+1].nome);
strcpy (tetris[k+1].nome,aux2);
}
if (tetris[k].soma == tetris[k+1].soma)
{
if(strcmp(tetris[k].nome,tetris[k+1].nome) > 0)
{
aux = tetris[k].soma;
tetris[k].soma = tetris[k+1].soma;
tetris[k+1].soma = aux;
strcpy (aux2,tetris[k].nome);
strcpy (tetris[k].nome,tetris[k+1].nome);
strcpy (tetris[k+1].nome,aux2);
}
}
}
}
tetris[0].posicao = 1;
col = 1;
col2 = 2;
for (i=1;i<j;i++)
{
if (tetris[i].soma == tetris[i-1].soma)
{
92
tetris[i].posicao = col;
col2++;
}
else
{
tetris[i].posicao = col2;
col = col2;
col2++;
}
}
printf ("Teste %d\n",teste++);
for (i=0;i<j;i++)
printf ("%d %d %s\n",tetris[i].posicao,tetris[i].soma,tetris[i].nome);
printf ("\n");
scanf ("%d",&j);
}
return 0;
}
93
3597. Par ou Ímpar
Problema: ODDOREVE
Existem muitas versões do Par ou Ímpar, um jogo jogado por competidores para
decidir questões aletórias (Tais como "Quem codificará este problema?"). Em uma
das versões, para dois jogadores, o jogo inicia com cada jogador dizendo par ou
ímpar. Então eles contam até três (algumas pessoas dizem "Um, dois, três, VAI!").
No três, ambos jogadores mostram uma das mãos, mostrando um número de
dedos (de zero a cinco). Se a soma dos dedos resulta em um número par, então a
pessoa que disse par ganha. Se a soma dos dedos for um número ímpar, então a
pessoa que disse ímpar ganha.
John e Mary jogaram muitas vezes jogos de Par ou Ímpar. Em todos os jogos John
escolheu ímpar (e, conseqüentemente, Mary escolheu par). Durante os jogos cada
jogador escreveu, em pequenos cartões, quantos dedos ele/ela mostraram, usando
uma carta para cada jogo - Mary usou cartões azuis, John usou cartões vermelhos.
O objetivo deles era ser capar de re-checar os resultados depois, procurando pelos
cartões de cada jogo. Entretanto, no fim do dia John derrubou o deque de cartões,
e após terem separados os cartões por cor, eles agora perderam a ordem.
Dado o conjunto de números escritos nos cartões vermelhos e azuis, você deve
escrever um programa para determinar o número mínimo de jogos que Mary
certamente ganhou.
Entrada
A entrada contém vários casos de teste. A primeira linha de cada caso de teste
contém um inteiro N representando o numero de jogos jogados (1<=N<=100). A
segunda linha de um caso de teste contém N inteiros X i, indicando o numero de
dedos mostrados por Mary em cada um dos jogos (0<=Xi =5, para 1<=i<=N). A
terceira linha de cada caso de teste contém N inteiros Y i, indicando o número de
dedos mostrados por John em cada um dos jogos (0<=Yi<=5, para 1<=i<=N). O fim
da entrada é indicado por N=0.
Saída
Para cada caso de teste, seu programa deve escrever uma linha, contendo um
inteiro, indicando o número mínimo de jogos que Mary certamente ganhou.
Exemplo de entrada
1 0 4
3 1 2
0 2 2 4 2 1 2 0 4
94
1 2 3 4 5 0 1 2 3
Exemplo de saída
Resolução
#include <stdio.h>
int main ()
{
int n,i,total,k,min;
while ((scanf("%d",&n)) && n!=0)
{
int john[n],mary[n];
total=0;
min=0;
for (i=0;i<n;i++)
{
scanf ("%d",&mary[i]);
}
for (i=0;i<n;i++)
{
scanf ("%d",&john[i]);
}
for (i=0;i<n;i++)
for (k=0;k<n;k++)
if (john[k]<=5)
if((mary[i]+john[k])%2 != 0)
{
total++;
john[k]=6;
break;
}
min = n-total;
printf ("%d\n",min);
}
return 0;
}
95
2844. Você pode dizer 11
Problema: ONZE
Entrada
A entrada é um arquivo onde cada linha contém um número positivo. Uma linha
contendo o número 0 sinaliza o fim da entrada. Os números dados podem conter
até 1000 dígitos.
Saída
Exemplo de Entrada
112233
30800
2937
323455693
5038297
112234
0
Exemplo de Saída
96
Resolução
#include <stdio.h>
int main ()
{
char n[1001];
int i,somapar,somaimpar,dif,flag;
while (scanf("%s",&n))
{
flag=0;
somapar=0;
somaimpar=0;
for (i=0;n[i];i++)
{
if(n[i]!='0')
{
flag=1;
break;
}
}
if (!flag)
return 0;
else
{
for (i=0;n[i];i++)
{
if(i%2==0)
somaimpar += n[i]-48;
else
somapar += n[i]-48;
}
dif = somaimpar-somapar;
printf("%s %s",n,((dif%11==0) || dif==0)?"is a multiple of 11.\n":"is not a multiple of
11.\n");
}
}
return 0;
}
97
2284. Palavras primas
Problema: PAPRIMAS
Um número primo é um número que possui somente dois divisores: ele mesmo e o
número 1. Exemplos de números primos são: 1, 2, 3, 5, 17, 101 e 10007.
Neste problema você deve ler um conjunto de palavras, onde cada palavra é
composta somente por letras no intervalo a-z e A-Z. Cada letra possui um valor
específico, a letra a vale 1, a letra b vale 2 e assim por diante, até a letra z, que
vale 26. Do mesmo modo, a letra A vale 27, a letra B vale 28 e a letra Z vale 52.
Você deve escrever um programa para determinar se uma palavra é uma palavra
prima ou não. Uma palavra é uma palavra prima se a soma de suas letras é um
número primo.
Entrada
Saída
Para cada palavra você imprimir: It is a prime word., se a soma das letras da
palavra é um número primo, caso contrário você deve imprimir It is not a prime
word..
Exemplo
Entrada:
UFRN
contest
AcM
Saída:
It is a prime word.
It is not a prime word.
It is not a prime word.
98
Resolução
#include <stdio.h>
#include <string.h>
int main ()
{
int soma,tamanho,i,primo;
char palavra[21] ;
while (scanf ("%s",&palavra) != EOF)
{
soma=0;
primo=0;
tamanho = strlen(palavra);
for (i=0;i<tamanho;i++)
{
if (palavra[i]<91)
soma+=palavra[i]-38;
else
soma+=palavra[i]-96;
}
for (i=1;i<=soma/2;i++)
{
if (soma%i==0)
primo++;
if (primo==2)
i=soma/2;
}
if (primo==1)
printf ("It is a prime word.\n");
else if (soma==1)
printf ("It is a prime word.\n");
else
printf ("It is not a prime word.\n");
}
return 0;
}
99
1363. Par ou ímpar
Problema: PAR
Muitas crianças gostam de decidir todas as disputas através do famoso jogo de Par
ou Ímpar. Nesse jogo, um dos participantes escolhe Par e o outro Ímpar. Após a
escolha, os dois jogadores mostram, simultaneamente, uma certa quantidade de
dedos de uma das mãos. Se a soma dos dedos das mãos dos dois jogadores for
par, vence o jogador que escolheu Par inicialmente, caso contrário vence o que
escolheu Ímpar.
Tarefa
Dada uma seqüência de informações sobre partidas de Par ou Ímpar (nomes dos
jogadores e números que os jogadores escolheram), você deve escrever um
programa para indicar o vencedor de cada uma das partidas.
Entrada
Exemplo de entrada
3
Pedro
Paulo
2 4
3 5
1 0
2
Claudio
Carlos
1 5
2 3
0
Saída
Para cada conjunto de teste da entrada, seu programa deve produzir a saída da
seguinte forma. A primeira linha deve conter um identificador do conjunto de teste,
no formato "Teste n", onde n é numerado seqüencialmente a partir de 1. As
próximas N linhas devem indicar o nome do vencedor de cada partida. A próxima
linha deve ser deixada em branco. A grafia mostrada no Exemplo de 3 Saída,
abaixo, deve ser seguida rigorosamente.
Exemplo de Saída
Teste 1
100
Pedro
Pedro
Paulo
Teste 2
Claudio
Carlos
Restrições
Resolução
#include <stdio.h>
int main ()
{
int n, i, teste = 1;
scanf("%d",&n);
while (n!=0)
{
int a[n], b[n];
char nome1[12], nome2[12];
scanf ("%s",&nome1);
scanf ("%s",&nome2);
for (i=0;i<n;i++)
{
scanf ("%d %d",&a[i],&b[i]);
}
printf ("Teste %d\n", teste);
teste++;
for (i=0;i<n;i++)
{
if ((a[i]+b[i])%2 == 0)
printf ("%s\n",nome1);
else
printf ("%s\n",nome2);
}
printf ("\n");
scanf("%d",&n);
}
return 0;
}
101
2846. Paridade
Problema: PARIDADE
Entrada
Cada linha da entrada possui um inteiro I e o fim da entrada é indicado por uma
linha onde I = 0, a qual não deve ser processada.
Saída
Para cada inteiro I na entrada você deve imprimir uma linha The parity of B is P
(mod 2)., onde B é a representação binária de I.
Exemplo de Entrada
1
2
10
21
0
Exemplo de Saída
102
Resolução
#include <stdio.h>
int main()
{
int n, i, total,count;
while (scanf("%d",&n) && n!=0)
{
char b[32];
total=0;
i=0;
count=0;
while (n>0)
{
if (n%2==0)
b[i++]='0';
else
{
b[i++]='1';
total++;
}
n/=2;
count++;
}
printf ("The parity of ");
for (i=count-1;i>=0;i--)
printf ("%c",b[i]);
printf (" is %d (mod 2).\n",total);
}
return 0;
}
103
3827. Pontos
Problema: PARPROX
Entrada
Saída
Seu programa deve imprimir uma única linha, contendo um número que
corresponde a distância do par de pontos mais próximos, com precisão na terceira
casa decimal.
Restrições
0 ≤ N ≤ 1000
-2000000 ≤ X, Y ≤ 2000000
Exemplo
Entrada
2
0 0
2 2
Saída
2.828
Entrada
5
100 -80
-9000 100
-200 100
500 -915
214 5
Saída
142.201
104
Resolução
#include <stdio.h>
#include <math.h>
int main ()
{
int n, p1, p2, i, j, x, y;
double min = 4000001;
float dist;
scanf ("%d",&n);
int x1[n], y1[n];
for (i=0;i<n;i++)
{
scanf ("%d %d",&x1[i],&y1[i]);
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (j != i)
{
x = (x1[j])-(x1[i]);
y = (y1[j])-(y1[i]);
dist = hypot(x,y);
if (dist < min)
min = dist;
}
}
}
printf ("%.3lf",min);
return 0;
}
105
8705. Pedágio
Problema: PEDAGIO1
A invenção do carro tornou muito mais rápido e mais barato realizar viagens de
longa distância. Realizar uma viagem rodoviária tem dois tipos de custos: cada
quilômetro percorrido na rodovia tem um custo associado (não só devido ao
consumo de combustível mas também devido ao desgaste das peças do carro,
pneus, etc.), mas também é necessário passar por vários pedágios localizados ao
longo da rodovia.
Tarefa
Entrada
A entrada consiste de duas linhas. A primeira linha da entrada contém dois inteiros
L e D (1 ≤ L, D ≤ 10 4), indicando o comprimento da estrada e a distância entre
pedágios, respectivamente. A segunda linha contém dois inteiros K e P (1 ≤ K, P ≤
10 4 ), indicando o custo por quilômetro percorrido e o valor de cada pedágio. O
primeiro pedágio está localizado no quilômetro D da estrada (ou seja, a distância
do início da estrada para o primeiro pedágio é D quilômetros).
Saída
Seu programa deve imprimir uma única linha contendo um único inteiro, indicando
o custo total da viagem.
Exemplo
Entrada
111 37
1 10
Saída
141
Entrada
100 30
3 14
Saída
342
Entrada
20 70
9 17
106
Saída
180
Resolução
#include <stdio.h>
int main()
{
int pedagio, rodovia, val_ped, val_gas, total=0;
scanf ("%d %d",&rodovia,&pedagio);
pedagio = rodovia/pedagio;
scanf ("%d %d",&val_gas,&val_ped);
total=total+(rodovia*val_gas)+(pedagio*val_ped);
printf ("%d",total);
return 0;
}
107
1734. Quem vai ser reprovado
Problema: PLACAR
Prof. Wallywow passou um conjunto de problemas aos alunos, e deu um mês para
que eles os resolvessem. No final do mês os alunos mandaram o número de
problemas resolvidos corretamente. A promessa do brilhante didata era reprovar
sumariamente o último colocado da competição. Os alunos seriam ordenados
conforme o número de problemas resolvidos, com empates resolvidos de acordo
com a ordem alfabética dos nomes (não há homônimos na turma). Isso fez com
que alunos com nomes iniciados nas últimas letras do alfabeto se esforçassem
muito nas tarefas, e não compartilhassem suas soluções com colegas
(especialmente aqueles cujos nomes começassem com letras anteriores). Sua
tarefa neste problema é escrever um programa que lê os resultados dos alunos do
Prof. Wallywow e imprime o nome do infeliz reprovado.
Entrada
Saída
Exemplo
Entrada:
4
cardonha 9
infelizreprovado 3
marcel 9
108
infelizaprovado 3
Saída:
Instancia 1
infelizreprovado
Resolução
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct notas
{
int nota;
char nome[22];
};
int main()
{
int n,i,instancia=1, nota, verif;
while (scanf ("%d", &n) != EOF)
{
nota = 11;
struct notas val[n];
for (i=0;i<n;i++)
{
scanf ("%s %d",&val[i].nome,&val[i].nota);
if (val[i].nota < nota)
{
verif = i;
nota = val[i].nota;
}
if (val[i].nota == nota)
{
if(strcmp(val[verif].nome,val[i].nome) < 0)
{
verif = i;
nota = val[i].nota;
}
}
}
printf ("Instancia %d\n",instancia++);
printf ("%s\n\n",val[verif].nome);
}
return 0;
}
109
2839. Popularidade
Problema: POPULAR
Autor: Tiago Mota
Para realizar a eleição, cada aluno receberá uma cédula eleitoral contendo os
nomes de todos os alunos da escola (inclusive ele próprio), na qual deverá
preencher os quadrados ao lado dos nomes dos alunos que gosta, utilizando caneta
esferográfica azul ou preta. Após o término do período de votação, as cédulas serão
colocadas numa máquina, a qual é capaz de informar quais quadrados foram
preenchidos em cada cédula.
Você pode assumir que os alunos da escola são participativos, de forma que todos
compareceram à votação e cada um preencheu exatamente uma cédula eleitoral.
Você pode assumir, ainda, que os alunos não sofrem por conflitos internos, de
modo que cada aluno gosta de si mesmo e vota em si mesmo. Note, porém, que a
relação gostar de'' não é simétrica, ou seja, se o aluno A gosta do aluno B, não
necessariamente o aluno B gosta do aluno A.
Entrada
Cada linha contém n inteiros, onde o j-ésimo inteiro da i-ésima linha é igual a 1,
caso o j-ésimo quadrado da cédula i esteja preenchido (ou seja, o aluno de
identificador i votou no aluno de identificador j); ou é igual a 0, caso contrário (o
aluno de identificador i não votou no aluno de identificador j).
Saída
110
Para cada caso de teste, seu programa deve imprimir uma linha, contendo apenas
um inteiro, correspondente à quantidade de votos recebidos pelo vencedor da
eleição.
Exemplo
Entrada:
3
1 0 1
0 1 1
1 0 1
5
1 1 1 0 0
1 1 0 1 1
1 0 1 0 1
0 1 0 1 0
0 1 1 1 1
3
1 0 0
0 1 0
0 0 1
0
Saída:
3
4
1
Resolução
#include <stdio.h>
int main()
{
int n,i,j,maior;
while (scanf("%d",&n) && n!=0)
{
int candidato,votos[n];
maior = 0;
for (i=0;i<n;i++)
votos[i]=0;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",&candidato);
if (candidato)
votos[j] += 1;
if (votos[j]>maior)
maior=votos[j];
}
}
printf ("%d\n",maior);
}
}
111
3828. Primo
Problema: PRIMO
Tarefa
Entrada
A entrada é composta por um único caso de teste, composto por uma única linha
que contém o inteiro N.
Saída
Seu programa deve produzir uma única linha, contendo a palavra "sim", se N for
primo, e "nao", caso contrário (note a ausência de acentuação).
Restrições
Exemplo
Entrada
7
Saída
sim
Entrada
10
Saída
nao
112
Resolução
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i, a, cont = 0;
scanf ("%d",&a);
if (a == 0)
printf ("sim");
else if (a<0)
a = a*(-1);
{
for (i=1;i<=a;i++)
{
if (a%i == 0)
cont++;
}
if (cont == 2)
printf ("sim");
else
printf ("nao");
}
return 0;
}
113
3829. Quadrados
Problema: QUADRAD2
Entrada
A entrada é composta por um único caso de teste, composto por uma única linha
que contém o inteiro N.
Saída
Seu programa deve produzir uma única linha, contendo o valor de N2.
Restrições
|N| ≤ 10000
Exemplo
Entrada
1
Saída
1
Entrada
4
Saída
16
Entrada
2
Saída
4
Resolução
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int a;
scanf ("%d",&a);
a = a*a;
printf ("%d",a);
return 0;
}
114
811. Quermesse
Problema: QUERM
O local escolhido para a festa foi o ginásio da escola. A entrada dos participantes foi
pela porta principal, que possui uma roleta, onde passa uma pessoa por vez. Na
entrada, um funcionário inseriu, em uma lista no computador da escola, o número
do ingresso, na ordem de chegada dos participantes. Depois da entrada de todos os
participantes, Teófilo começou a trabalhar no computador para preparar o sorteio.
Verificando a lista de presentes, notou uma característica notável: havia apenas um
caso, em toda a lista, em que o participante que possuia o ingresso numerado com
i, havia sido a i-ésima pessoa a entrar no ginásio. Teófilo ficou tão encantado com
a coincidência que decidiu que o sorteio não seria necessário: esta pessoa seria o
ganhador do computador.
Tarefa
Entrada
Saída
Para cada conjunto de teste da entrada seu programa deve produzir três linhas. A
primeira linha identifica o conjunto de teste, no formato "Teste n", onde n é
numerado a partir de 1. A segunda linha deve conter o número do ingresso do
ganhador, conforme determinado pelo seu programa. A terceira linha deve ser
deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser
seguida rigorosamente.
Exemplo
Entrada:
4
4 5 3 1
10
115
9 8 7 6 1 4 3 2 12 10
0
Saída:
Teste 1
3
Teste 2
10
Restrições
Resolução
#include <stdio.h>
int main ()
{
int n=1,i,teste=1;
while (n != 0)
{
scanf("%d",&n);
int v[n+1];
for (i=1; i<=n; i++)
{
scanf("%d",&v[i]);
}
116
1745. Recuperação
Problema: RECUPERA
Sua tarefa, mesmo não tendo sido reprovado, é dado uma sequência 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 + .. + ak-1. Se houver mais de um inteiro que
satisfaça esta condição, imprima o que aparece primeiro na seqüência.
Entrada
Saída
Exemplo
Entrada:
1
0
7
1 2 3 4 5 6 7
Saída:
Instancia 1
0
Instancia 2
3
Resolução
117
#include <stdio.h>
int main()
{
int n,i,instancia=1,temp,achei,val;
while (scanf("%d",&n)!=EOF)
{
int vet[n];
achei = 0;
for (i=0;i<n;i++)
{
scanf("%d",&vet[i]);
if (!i)
temp=vet[i];
else if (temp==vet[i]&& !achei)
{
val=vet[i];
achei=1;
}
else
temp+=vet[i];
}
printf ("Instancia %d\n",instancia++);
if ((n==1) && (!vet[0]))
printf ("0\n\n");
else if (((n==1) && (vet[0])) || (!achei))
printf ("nao achei\n\n");
else
printf ("%d\n\n",val);
}
return 0;
}
118
810. Rede ótica
Problema: REDOTICA
Tarefa
Vamos denominar uma ligação de fibra ótica entre duas tabas de um ramo de rede.
Para possibilitar a comunicação entre todas as tabas é necessário que todas elas
estejam interligadas, direta (utilizando um ramo de rede) ou indiretamente
(utilizando mais de um ramo). Os caciques conseguiram a informação do impacto
ambiental que causará a construção dos ramos. Alguns ramos, no entanto, nem
foram considerados no estudo ambiental, pois sua construção é impossível.
Sua tarefa é escrever um programa para determinar quais ramos devem ser
construídos, de forma a possibilitar a comunicação entre todas as tabas, causando
o menor impacto ambiental possível.
Entrada
Saída
119
Para cada conjunto de teste da entrada seu programa deve produzir uma lista dos
ramos de redes que devem ser construídos. A lista deve ser precedida de uma linha
que identifica o conjunto de teste, no formato "Teste n", onde n é numerado a
partir de 1. A lista é composta por uma sequência de ramos a serem construídos,
um ramo por linha. Um ramo é descrito por um par de tabas X e Y , com X < Y. Os
ramos de rede podem ser listados em qualquer ordem, mas não deve haver
repetição. Se houver mais de uma solução possível, imprima apenas uma delas. O
final de uma lista de ramos deve ser marcado com uma linha em branco. A grafia
mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente.
Exemplo
Entrada:
3 3
1 2 10
2 3 10
3 1 10
5 6
1 2 15
1 3 12
2 4 13
2 5 5
3 2 6
3 4 6
0 0
Saída:
Teste 1
1 2
1 3
Teste 2
1 3
2 3
2 5
3 4
Restrições
120
Resolução
#include <stdio.h>
int main ()
{
int arestas, vertices, de, para, valor, i, k, j, minimo, teste=1;
while ((scanf ("%d %d",&vertices,&arestas)) && vertices!=0)
{
vertices=vertices+1;
int tabas[vertices];
int grafo[vertices][vertices];
printf ("\n");
}
return 0;
}
121
3830. Soma
Problema: SOMA
Entrada
Saída
Seu programa deve produzir uma única linha na saída, contendo a soma de todos
os N inteiros.
Restrições
0 ≤ N ≤ 50
|X| ≤ 5000
Exemplo
Entrada
3
1
5
3
Saída
9
Resolução
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int aux, soma=0, n, i;
scanf ("%d",&n);
for (i=1;i<=n;i++)
{
scanf ("%d",&aux);
soma = soma + aux;
}
printf ("%d",soma);
return 0;
}
122
1763. Sudoku
Problema: SUDOIME
Entrada
1 3 2 | 5 7 9 | 4 6 8
4 9 8 | 2 6 1 | 3 7 5
7 5 6 | 3 8 4 | 2 1 9
------+-------+------
6 4 3 | 1 5 8 | 7 9 2
5 2 1 | 7 9 3 | 8 4 6
9 8 7 | 4 2 6 | 5 3 1
------+-------+------
2 1 4 | 9 3 5 | 6 8 7
3 6 5 | 8 1 7 | 9 2 4
8 7 9 | 6 4 2 | 1 5 3
Saída
Para cada instância seu programa deverá imprimir uma linha dizendo Instancia k,
onde k é o número da instância atual. Na segunda linha, seu programa deverá
imprimir SIM se a matriz for a solução de um problema de Sudoku, e NAO caso
contrário. Imprima uma linha em branco após cada instância.
Exemplo
Entrada:
2
1 3 2 5 7 9 4 6 8
4 9 8 2 6 1 3 7 5
7 5 6 3 8 4 2 1 9
6 4 3 1 5 8 7 9 2
5 2 1 7 9 3 8 4 6
9 8 7 4 2 6 5 3 1
2 1 4 9 3 5 6 8 7
3 6 5 8 1 7 9 2 4
8 7 9 6 4 2 1 5 3
1 3 2 5 7 9 4 6 8
123
4 9 8 2 6 1 3 7 5
7 5 6 3 8 4 2 1 9
6 4 3 1 5 8 7 9 2
5 2 1 7 9 3 8 4 6
9 8 7 4 2 6 5 3 1
2 1 4 9 3 5 6 8 7
3 6 5 8 1 7 9 2 4
8 7 9 6 4 2 1 3 5
Saída:
Instancia 1
SIM
Instancia 2
NAO
Resolução
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n, i, j, instancia = 1;
scanf("%d%*c", &n);
while (n-- > 0) {
int matriz[9][9];
flag = 1;
for (i = 0; i < 9; ++i)
for (j = 0; j < 9; ++j)
scanf("%d%*c", &matriz[i][j]);
124
else
vC[matriz[j][i]]++;
}
}
for (i = 0; i < 9; i += 3)
for (j = 0; j < 9; j += 3)
verificaQuadrados(matriz, i, j);
if (flag)
printf("Instancia %d\nSIM\n", instancia++);
else
printf("Instancia %d\nNAO\n", instancia++);
}
return 0;
}
125
1894. Jogo de Varetas
Problema: VARETAS
Há muitos jogos divertidos que usam pequenas varetas coloridas. A variante usada
neste pro- blema envolve a construção de retângulos. O jogo consiste em, dado um
conjunto de varetas de comprimentos variados, desenhar retângulos no chão,
utilizando as varetas como lados dos retângulos, sendo que cada vareta pode ser
utilizada em apenas um retângulo, e cada lado de um retângulo é formado por uma
única vareta. Nesse jogo, duas crianças recebem dois conjuntos iguais de varetas.
Ganha o jogo a criança que desenhar o maior número de retângulos com o
conjunto de varetas.
Entrada
Saída
Para cada caso de teste da entrada seu programa deve produzir uma única linha na
saída, contendo um número inteiro, indicando o número máximo de retângulos que
podem ser formados com o conjunto de varetas dado.
Exemplo
Entrada:
1
10 7
4
50 2
40 2
30 4
60 4
5
15 3
6 3
12 3
70 5
71 1
0
126
Saída:
1
3
2
Resolução
#include <stdio.h>
int main()
{
int n,i,temp,retangulos,soma;
while (scanf("%d",&n) && n!=0)
{
int vet[n];
soma=0;
for (i=0;i<n;i++)
{
scanf ("%d %d",&temp,&vet[i]);
if (vet[i]%2!=0)
vet[i]--;
soma += vet[i];
}
retangulos = soma/4;
printf ("%d\n",retangulos);
}
return 0;
}
127