Você está na página 1de 23

1920 UAb Prog. Exercícios 1  701528@estudante.uab.

pt

You can view this report online at : https://www.hackerrank.com/x/tests/557924/candidates/18333803/report

Full Name: Antonio Manuel Duarte Rodrigues

Email: 701528@estudante.uab.pt
82.1% scored in 1920 UAb Prog.
Test Name: 1920 UAb Prog. Exercícios 1 Exercícios 1 in 34380 min 13
915/1115 sec on 15 Oct 2020 00:59:30
Taken On: 15 Oct 2020 00:59:30 WEST
WEST
Time Taken: 34380 min 13 sec/ 43200 min

Invited by: José

Skills Score:

Tags Score:

Recruiter/Team Comments:

No Comments.

Plagiarism flagged

We have marked questions with suspected plagiarism below. Please review.

Question Description Time Taken Score Status

Q1 1) Exercícios  Multiple Choice 3 min 25 sec 5/ 5 


Q2 olamundosizeof.c  Coding 36 min 40 sec 10/ 10 
Q3 soma.c  Coding 25 min 10 sec 40/ 40 
Q4 hms.c  Coding 19 min 30 sec 40/ 40 
Q5 produto.c  Coding 23 min 11 sec 40/ 40 
Q6 arranjos.c  Coding 30 min 51 sec 60/ 60 
Q7 somadigitos.c  Coding 25 min 43 sec 80/ 80 
Q8 fibonacci.c  Coding 31 min 48 sec 80/ 80 
Q9 combinacoes.c  Coding 25 min 44 sec 80/ 80 
Q10 euler.c  Coding 37 min 6 sec 80/ 80 
Q11 trocos.c  Coding 25 min 30 sec 100/ 100 
Q12 primo.c  Coding 43 min 11 sec 100/ 100 
/
Q13 triplasoma.c  Coding 3 hour 28 min 26 sec 120/ 120 
Q14 pi.c  Coding 1 hour 22 min 54 sec 80/ 120 
Q15 formularesolvente.c  Coding 58 min 2 sec 0/ 160 

QUESTION 1 1) Exercícios 

Multiple Choice

Correct Answer
QUESTION DESCRIPTION

Notas gerais a ter em atenção em todos os exercícios:


Score 5
Escreva sem acentos;
Utilize para as variáveis inteiras, o tipo int, confirmando que tem 4 bytes no exercício
olamundosizeof.c, caso contrário utilize o tipo equivalente;
Utilize para as variáveis reais a precisão dupla, o tipo double;
Durante o desenvolvimento do programa, imprima resultados parciais, de forma a garantir o que o
programa faz, eventualmente comentando esse código na versão final;
O separador decimal da linguagem C é o ponto final, pelo que será utilizado nos resultados dos
exercícios (12.435 é correcto, 12,435 é incorrecto), mas na introdução dos dados e impressão dos
resultados, poderá variar conforme as configurações no computador;
Se não consegue resolver um exercício, pense numa variável auxiliar que lhe dê jeito;
Existem dicas adicionais sobre alguns exercícios no anexo Exercícios: Dicas, Respostas e Resoluções,
bem como forma de validar a resposta de um exercício sem ver uma resolução, e resoluções dos
exercícios para comparar após resolvê-los.
As dicas adicionais são colocadas também no final do exercício, a cor branca. Deve selecionar o texto
para poder ler, mas apenas caso não consiga resolver.
Em alguns exercícios é necessário colocar o texto a solicitar dados ao utilizador, outros simplesmente
assumem que o utilizador irá introduzir os dados de entrada pela ordem especificada. Se tiver
dúvidas, verifique no caso de teste, qual das situações se aplica.

Ação: selecione as frases corretas

CANDIDATE ANSWER

Options: (Expected answer indicated with a tick)

As dicas adicionais são essenciais para resolver os exercícios

Nos tipos inteiros deve-se utilizar int

Nos tipos reais deve-se utilizar o tipo float

As dicas adicionais estão também no final do exercício.

No Comments

/
QUESTION 2 olamundosizeof.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Faça um programa que coloque Olá Mundo! numa linha e em bom português (com acentos), e que
Score 10
indique o tamanho em bytes (operador sizeof) dos seguintes tipos de dados: char; short; int; long; long
long; float; double; long double. Coloque um valor em cada linha.

Execução de exemplo:

C:\>olamundosizeof

Olá Mundo!
sizeof(char): xx
sizeof(short): xx
sizeof(int): xx
sizeof(long): xx
sizeof(long long): xx
sizeof(float): xx
sizeof(double): xx
sizeof(long double): xx

Nota: em vez de xx o programa deve apresentar o valor correto. Por exemplo, no sizeof(char) deverá estar
1, dado que um caracter ocupa um byte.

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
3 int main()
4 {
5 printf("Olá Mundo!");
6 /* display em bytes dos diferentes tipos */
7 printf("\nsizeof(char): %d", sizeof(char));
8 printf("\nsizeof(short): %d", sizeof(short));
9 printf("\nsizeof(int): %d", sizeof(int));
10 printf("\nsizeof(long): %d", sizeof(long));
11 printf("\nsizeof(long long): %d", sizeof(long long));
12 printf("\nsizeof(float): %d", sizeof(float));
13 printf("\nsizeof(double): %d", sizeof(double));
14 printf("\nsizeof(long double): %d", sizeof(long double));
15 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.0256 sec 7.56 KB

No Comments

QUESTION 3 soma.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Somar os primeiros N números inteiros, sendo N definido pelo utilizador.


Score 40

Notas:
/
Notas:
Escreva sem acentos neste e nos restantes exercícios, para que o código funcione sempre
corretamente.
Durante o desenvolvimento do programa, imprima resultados parciais, de forma a garantir o que o
programa faz, eventualmente comentando esse código na versão final, dado que esse texto poderá
fazer sentido apenas para o programador e não para o utilizador.
Neste exemplo, deixe o código com os parciais, exatamente conforme indicado na execução de
exemplo seguinte.

Execução de exemplo (com resultados parciais):

C:\>soma
Calculo da soma dos primeiros N numeros.
Indique N:10

adicionar 1, parcial 1
adicionar 2, parcial 3
adicionar 3, parcial 6
adicionar 4, parcial 10
adicionar 5, parcial 15
adicionar 6, parcial 21
adicionar 7, parcial 28
adicionar 8, parcial 36
adicionar 9, parcial 45
adicionar 10, parcial 55
Total: 55

Execução de exemplo (sem resultados parciais):

C:\>soma
10
55

Entrada:
N - número inteiro

Saída:
Todos os resultados parciais, de acordo com a execução de exemplo em cima

Atenção: existem dois espaços nas linhas de parciais antes da palavra "adicionar", e não apenas um
espaço.
Atenção: a frase inicial deve estar exactamente como na execução de exemplo "Calculo da soma dos
primeiros N numeros.", não coloque acentos nem adicione espaços.

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
3 int main()
4 {
5 int i, N, resultado;
6
7 printf("Calculo da soma dos primeiros N numeros.\nIndique N:");
8 /* ler na entrada de dados, o valor N solicitado*/
9 scanf("%d",&N);
10
11 /* coloque em resultado a soma dos primeiros
12 N números inteiros*/
13 resultado=0;
14 i=1;
15 while (i<=N)
/
5 w e ( )
16 {
17 resultado=resultado+i;
18 /* a meio, mostrar o resultado parcial */
19 printf("\n adicionar %d, parcial %d", i, resultado);
20 i++;
21 }
22
23 /* mostrar resultado final */
24 printf("\nTotal: %d\n", resultado);
25 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.0293 sec 7.52 KB

Testcase 2 Easy Sample case  Success 10 0.0332 sec 7.53 KB

Testcase 3 Easy Hidden case  Success 10 0.0283 sec 7.61 KB

Testcase 4 Easy Hidden case  Success 10 0.0339 sec 7.48 KB

No Comments

QUESTION 4 hms.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Faça um programa que leia as horas, minutos e segundos, e calcule o número de segundos que
Score 40
passaram desde o início do dia.

Notas:
Não faça verificação da validade dos parâmetros de entrada

Execução de exemplo:

C:\>hms
Calculo do numero de segundos desde o inicio do dia.
Hora: 2
Minuto: 15
Segundos: 30
Numero de segundos desde o inicio do dia: 8130

Entrada:
Hora, Minuto, segundo - valores inteiros
Saída:
Segundos desde o início do dia
Atenção: repare que o output tem frases que supostamente devem estar em linhas distintas, na mesma
linha. Isso deve-se a que o input é que troca de linha, ficando o output todo na mesma linha. Veja na
execução de exemplo, os dados de entrada 2, 15 e 30 são seguidos de um RETURN, mudança de linha. A
não existir esse return, que faz parte dos dados de entrada (input), a frase seguinte continuaria na mesma
linha. O HackerRank apresenta o input e output em zonas distintas, pelo que existe mudança de linha
apenas no input, e não no output.

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
/
2
3 int main()
4 {
5 int horas, minutos, segundos;
6 printf("Calculo do numero de segundos desde o inicio do dia.\n");
7 printf("Hora: ");
8 scanf("%d", &horas);
9 printf("Minuto: ");
10 scanf("%d", &minutos);
11 printf("Segundos: ");
12 scanf("%d", &segundos);
13
14 printf("Numero de segundos desde o inicio do dia: %d", (horas*3600)+
15 (minutos*60)+segundos);
}

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.0337 sec 7.52 KB

Testcase 2 Easy Sample case  Success 10 0.0285 sec 7.5 KB

Testcase 3 Easy Hidden case  Success 10 0.0262 sec 7.58 KB

Testcase 4 Easy Hidden case  Success 10 0.027 sec 7.58 KB

No Comments

QUESTION 5 produto.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Multiplicar os primeiros N números inteiros positivos (factorial de N), sendo N definido pelo utilizador.
Score 40

Execução de exemplo (com parciais):

C:\>produto
Calculo do produto dos primeiros N numeros.
Indique N:5
Factorial(1)=1
Factorial(2)=2
Factorial(3)=6
Factorial(4)=24
Factorial(5)=120
Resultado: 120

Execução de exemplo (sem parciais):

C:\>produto
5
120

Entrada:
N - número inteiro
Saída:
Resultado com os parciais, de acordo com o exemplo em cima
Atenção: existem dois espaços a preceder a palavra "Factorial"

/
CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
3 int main()
4 {
5 int i, numero, produto;
6
7 printf("Calculo do produto dos primeiros N numeros.\nIndique N:");
8 scanf("%d", & numero);
9
10 i=1;
11 produto=1;
12
13 while (i <= numero)
14 {
15 produto*=i;
16 printf(" Factorial(%d)=%d\n", i, produto);
17 i++;
18 }
19 printf("Resultado: %d", produto);
20 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.023 sec 7.52 KB

Testcase 2 Easy Sample case  Success 10 0.0309 sec 7.36 KB

Testcase 3 Easy Hidden case  Success 10 0.0289 sec 7.51 KB

Testcase 4 Easy Hidden case  Success 10 0.0266 sec 7.52 KB

No Comments

QUESTION 6 arranjos.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Calculo dos arranjos de N, R a R: multiplicar os números de N-R+1 até N.


Score 60

Notas:
Atenção que R tem de ser menor que N
Os arranjos de 3 elementos {A, B, C}, 2 a 2, são os seguintes 6: (A,B); (A,C); (B,A); (B,C); (C,A); (C,B).

Execução de exemplo (com parciais):

C:\>arranjos
Calculo dos arranjos de N, R a R:
Indique N:5
Indique R:3
i=3; arranjos=3
i=4; arranjos=12
i=5; arranjos=60
Resultado: 60

Execução de exemplo (sem parciais):

/
C:\>arranjos
5
3
60

Entrada:
N, R - valores inteiros
Saída:
Resultado com os parciais, de acordo com o exemplo em cima. Caso não seja possível o calculo,
retornar a mensagem "Erro: N tem de ser maior que R e este maior que 0."

Ajudas extra (selecionar para mostrar):


Não consigo acertar apenas um dos testes: combinações 20 8 a 8 dá o valor 5079110400.
O valor correto de combinações 20, 8 a 8 é realmente esse. No entanto essa não é a resposta
correta ao exercício, que deve ser resolvido com inteiros de 4 bytes. Troque todas as variáveis
inteiras para inteiros de 4 bytes e execute novamente o programa.
Vários resultados errados. Calculo N! e (N-R)!, e depois divido um valor pelo o outro, conforme a
fórmula na wikipédia
Calculando ambos os fatoriais está a fazer não só mais contas, como também ultrapassa o limite
dos inteiros mais cedo, atendendo que o factorial cresce muito rapidamente. Se tiver um valor
de R pequeno, pode conseguir calcular arranjos mesmo com um N grande, em que não consegue
obter o factorial de N, mas consegue obter arranjos de N, R a R. Utilizar um tipo mais potente,
resolve o problema do limite para valores pequenos, mas teria o problema à mesma para muitos
valores que poderiam ser calculados pela segunda fórmula. Atenção que todos os tipos inteiros
devem ter 4 bytes, atendendo a que os exercícios estão equilibrados para esse tipo de dados.

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
3 int main()
4 {
5 int i, n, r, numeroarranjos;
6
7 printf("Calculo dos arranjos de N, R a R:\nIndique N:");
8 scanf("%d", &n);
9 printf("Indique R:");
10 scanf("%d", &r);
11
12 /* validação dados introduzidos */
13 if (n < r || r < 1)
14 printf("Erro: N tem de ser maior que R e este maior que 0.\n");
15 else
16 {
17 i=n-r+1;
18 numeroarranjos=1;
19 while(i<=n)
20 {
21 numeroarranjos*=i;
22 printf(" i=%d; arranjos=%d\n", i, numeroarranjos);
23 i++;
24 }
25 printf("Resultado: %d", numeroarranjos);
26 }
27 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED


/
Testcase 0 Easy Sample case  Success 2 0.0289 sec 7.63 KB

Testcase 1 Easy Sample case  Success 2 0.0258 sec 7.41 KB

Testcase 2 Easy Sample case  Success 2 0.0249 sec 7.63 KB

Testcase 3 Easy Sample case  Success 2 0.0257 sec 7.64 KB

Testcase 4 Easy Hidden case  Success 2 0.0281 sec 7.61 KB

Testcase 5 Easy Hidden case  Success 10 0.0253 sec 7.44 KB

Testcase 6 Easy Hidden case  Success 10 0.0257 sec 7.45 KB

Testcase 7 Easy Hidden case  Success 10 0.0243 sec 7.62 KB

Testcase 8 Easy Hidden case  Success 10 0.0283 sec 7.52 KB

Testcase 9 Easy Hidden case  Success 10 0.025 sec 7.44 KB

No Comments

QUESTION 7 somadigitos.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Calcule a soma dos quadrados dos dígitos de um número introduzido pelo utilizador.
Score 80

Notas (selecionar para mostrar):


Pode obter o valor do dígito mais baixo, calculando o resto da divisão por 10.
Mostre o resultado parcial, neste e nos restantes exercícios.

Execução de exemplo (com parciais):

C:\>somadigitos
Calculo da soma do quadrado dos digitos de um numero:
Numero: 1234
n=1234; soma=16
n=123; soma=25
n=12; soma=29
n=1; soma=30
Resultado: 30

Execução de exemplo (sem parciais):

C:\>somadigitos
1234
30

Entrada:
N - número inteiro
Saída:
Resultado da execução com parciais, de acordo com a execução em cima.

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
/
3 int main()
4 {
5 int numero, soma;
6
7 printf("Calculo da soma do quadrado dos digitos de um numero: \nNumero:
8 ");
9 scanf("%d", &numero);
10
11 soma=0;
12 while(numero!=0)
13 {
14 /* resto da divisão do numero por 10 ao quadrado */
15 soma+=(numero%10)*(numero%10);
16 printf(" n=%d; soma=%d\n", numero, soma);
17 /* numero dividido por 10 ficando a parte inteira*/
18 numero/=10;
19 }
20 printf("Resultado: %d\n", soma);
}

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.027 sec 7.53 KB

Testcase 1 Easy Sample case  Success 10 0.0258 sec 7.43 KB

Testcase 2 Easy Sample case  Success 10 0.0294 sec 7.44 KB

Testcase 3 Easy Sample case  Success 10 0.0291 sec 7.45 KB

Testcase 4 Easy Hidden case  Success 10 0.0268 sec 7.45 KB

Testcase 5 Easy Hidden case  Success 10 0.0236 sec 7.61 KB

Testcase 6 Easy Hidden case  Success 10 0.0242 sec 7.67 KB

Testcase 7 Easy Hidden case  Success 10 0.028 sec 7.54 KB

No Comments

QUESTION 8 fibonacci.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Calcular o valor da função Fibonacci {definição da função Fibonacci não padrão}, para um dado
Score 80
argumento N. Para N=1 ou 2, deve retornar N, caso contrário retorna a soma dos dois valores anteriores.

Notas (selecionar para mostrar):


Utilize duas variáveis auxiliares.

Execução de exemplo (com parciais):

C:\>fibonacci
Calculo do valor da funcao Fibonacci:
Indique N:6
Fib(3)=3
Fib(4)=5
Fib(5)=8
Fib(6)=13
Resultado: 13

Execução de exemplo (sem parciais):

/
C:\>fibonacci
6
13

Entrada:
N - valor de entrada
Saída:
Resultado de Fibonacci de N (de acordo com a definição do enunciado), e com resultados parciais,
conforme execução em cima.

Ajudas extra (selecionar para mostrar):


Não compreendo a função / o que se pede
Esta a função Fibonacci(N) tem uma definição recursiva. Para os valores de N=1 e 2, aplica-se N,
sendo portanto 1 e 2, respectivamente. Para N=3 ou superior, aplica-se Fibonacci(N-1) +
Fibonacci(N-2) e retorna a soma dos dois valores imediatamente anteriores.

Exemplos:
•F(3)=F(2)+F(1)=2+1=3
•F(4)=F(3)+F(2)=3+2=5
•F(5)=F(4)+F(3)=5+3=8
•F(6)=F(5)+F(4)=8+5=13

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
3 int main()
4 {
5 int i, fib1, fib2, numero, resultado;
6
7 printf("Calculo do valor da funcao Fibonacci:\nIndique N:");
8 scanf("%d", &numero);
9
10 if (numero<1)
11 printf("Erro: N tem de ser maior ou igual a 1.\n");
12 else
13 {
14 resultado=numero;
15 if (numero>2)
16 {
17 fib1=1;
18 fib2=2;
19 i=3;
20 while (i<=numero)
21 {
22 resultado=fib1+fib2;
23 fib1=fib2;
24 fib2=resultado;
25 printf(" Fib(%d)=%d\n", i, resultado);
26 i++;
27 }
28 }
29 printf("Resultado: %d\n", resultado);
30 }
31 }

/ TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED


TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.027 sec 7.65 KB

Testcase 1 Easy Sample case  Success 10 0.029 sec 7.65 KB

Testcase 2 Easy Sample case  Success 10 0.0243 sec 7.53 KB

Testcase 3 Easy Sample case  Success 10 0.0294 sec 7.63 KB

Testcase 4 Easy Hidden case  Success 10 0.0276 sec 7.5 KB

Testcase 5 Easy Hidden case  Success 10 0.0275 sec 7.5 KB

Testcase 6 Easy Hidden case  Success 10 0.0255 sec 7.45 KB

Testcase 7 Easy Hidden case  Success 10 0.0291 sec 7.65 KB

No Comments

QUESTION 9 combinacoes.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Calcule as combinações de N, R a R: multiplicar os números de N-R+1 até N, dividindo o resultado


Score 80
pelo factorial de R (produto de todos os números de 1 a R).

Notas:
Se efectuar as multiplicações e só dividir no final, rapidamente ultrapassa o limite do inteiro. Se
multiplicar e depois dividir em cada passo, consegue obter valores correctos para uma maior gama de
números.
As combinações de 3 elementos {A, B, C}, 2 a 2, são as seguintes 3: {A,B}; {A,C}; {B,C}. Notar que
relativamente aos arranjos, neste caso a ordem não interessa.

Execução de exemplo (com parciais):

C:\>combinacoes
Calculo das combinacoes de N, R a R:
Indique N:5
Indique R:3
1*3=3, 3/1=3
3*4=12, 12/2=6
6*5=30, 30/3=10
Resultado: 10

Execução de exemplo (sem parciais):

C:\>combinacoes
5
3
10

Entrada:
N, R - inteiros
Saída:
Resultado com execução passo a passo, de acordo com exemplo em cima

CANDIDATE ANSWER

Language used: C

/
1 #include <stdio.h>
2
3 int main()
4 {
5 int i, n, r, ncombinacoes;
6 printf("Calculo das combinacoes de N, R a R:\nIndique N:");
7 scanf("%d", &n);
8 printf("Indique R:");
9 scanf("%d", &r);
10
11 if (n<r || r<1)
12 printf("Erro: N tem de ser maior que R e este maior que 0.\n");
13 else
14 {
15 i=1;
16 ncombinacoes=1;
17 while (i<=r)
18 {
19 printf(" %d", ncombinacoes);
20 ncombinacoes*=(n-r+i);
21 printf("*%d=%d, %d", n-r+i, ncombinacoes, ncombinacoes);
22 ncombinacoes/=i;
23 printf("/%d=%d\n", i, ncombinacoes);
24 i++;
25 }
26 printf("Resultado: %d\n", ncombinacoes);
27 }
28 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.0318 sec 7.5 KB

Testcase 1 Easy Sample case  Success 10 0.0296 sec 7.53 KB

Testcase 2 Easy Sample case  Success 10 0.0281 sec 7.62 KB

Testcase 3 Easy Hidden case  Success 10 0.0295 sec 7.41 KB

Testcase 4 Easy Hidden case  Success 10 0.0261 sec 7.62 KB

Testcase 5 Easy Hidden case  Success 10 0.0249 sec 7.52 KB

Testcase 6 Easy Hidden case  Success 10 0.0288 sec 7.53 KB

Testcase 7 Easy Hidden case  Success 10 0.0272 sec 7.36 KB

No Comments

QUESTION 10 euler.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Calcular o número de Euler e, através da utilização da série de Taylor para ex quando x=1: soma dos
Score 80
inversos dos fatoriais, de 0 a K, com K a tender para infinito: 1/0! + 1/1! + 1/2! + ... + 1/K!

Notas:
Considere o fatorial de zero como sendo 1 (N! é o fatorial de N, sendo o produto dos números de 1 a
N)
Utilize a precisão dupla para valores reais, neste e em outros exercícios
Na função printf pode imprimir um número real em notação científica, e especificando a precisão a
16 dígitos utilizando a string de formatação: %.16g

Execução de exemplo (com parciais K=20):


/
«34»Execução de exemplo (com parciais, K=20):

C:\>euler
0: 1
1: 2
...
19: 2.7183
20: 2.7183
Resultado: 2.71828182845xxxx

Entrada:
K - número de elementos da série a somar
Saída:
Resultado - sem parciais, como na execução em baixo

Execução de exemplo (sem parciais):

C:\>euler
2
2.5

Atenção: verifique que já não é preciso mostrar os parciais. Após terminar os testes, remova todos os
parciais e apresente apenas o resultado final.

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
3 int main()
4 {
5 int i=0, k;
6 double resultado=0, factorial=1;
7
8 scanf("%d",&k);
9 while (i<=k)
10 {
11 if (i>1)
12 factorial*=i;
13 resultado+=1/factorial;
14 i++;
15 }
16 printf("%.16g", resultado);
17 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.0272 sec 7.5 KB

Testcase 1 Easy Sample case  Success 10 0.0298 sec 7.56 KB

Testcase 2 Easy Sample case  Success 10 0.0241 sec 7.41 KB

Testcase 3 Easy Hidden case  Success 10 0.0329 sec 7.62 KB

Testcase 4 Easy Hidden case  Success 10 0.0262 sec 7.61 KB

Testcase 5 Easy Hidden case  Success 10 0.0283 sec 7.63 KB

Testcase 6 Easy Hidden case  Success 20 0.0395 sec 7.62 KB

/
No Comments

QUESTION 11 trocos.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Faça um programa que receba um montante em euros (com cêntimos), e que determina o menor
Score 100
número de moedas de cada tipo necessário para perfazer esse montante. Pode utilizar moedas de euros
de todos os valores disponíveis (2€, 1€, ...).

Notas:
Deve efectuar os arredondamentos para a unidade mais próxima, no caso de o utilizador introduzir
um valor com precisão abaixo do cêntimo.

Execução de exemplo:

C:\>trocos
Introduza um montante em euros, podendo ter centimos: 1.79
1 euro: 1
50 centimos: 1
20 centimos: 1
5 centimos: 1
2 centimos: 2

Entrada:
Montante - valor real
Saída:
Replicar a saída na execução de exemplo

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
3 int main()
4 {
5 float montante;
6 int contador;
7
8 printf("Introduza um montante em euros, podendo ter centimos: ");
9 scanf("%f", &montante);
10
11 montante+=0.005;
12
13 /* 2 euros */
14 contador=(int)(montante/2);
15 montante-=2*contador;
16 if(contador>0)
17 printf("2 euros: %d\n", contador);
18
19 /* 1 euro */
20 contador=(int)(montante);
21 montante-=contador;
22 if(contador>0)
23 printf("1 euro: %d\n", contador);
24
25 /* 50 centimos */
26 contador=(int)(montante/.5);
/
27 montante-=.5*contador;
28 if(contador>0)
29 printf("50 centimos: %d\n", contador);
30
31 /* 20 centimos */
32 contador=(int)(montante/.2);
33 montante-=.2*contador;
34 if(contador>0)
35 printf("20 centimos: %d\n", contador);
36
37 /* 10 centimos */
38 contador=(int)(montante/.1);
39 montante-=.1*contador;
40 if(contador>0)
41 printf("10 centimos: %d\n", contador);
42
43 /* 5 centimos */
44 contador=(int)(montante/.05);
45 montante-=.05*contador;
46 if(contador>0)
47 printf("5 centimos: %d\n", contador);
48
49 /* 2 centimos */
50 contador=(int)(montante/.02);
51 montante-=.02*contador;
52 if(contador>0)
53 printf("2 centimos: %d\n", contador);
54
55 /* 1 centimo */
56 contador=(int)(montante/.01);
57 montante-=.01*contador;
58 if(contador>0)
59 printf("1 centimo: %d\n", contador);
60
61 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 10 0.0278 sec 7.54 KB

Testcase 1 Easy Sample case  Success 10 0.0243 sec 7.5 KB

Testcase 2 Easy Sample case  Success 10 0.0265 sec 7.61 KB

Testcase 3 Easy Hidden case  Success 10 0.0297 sec 7.49 KB

Testcase 4 Easy Hidden case  Success 10 0.0267 sec 7.49 KB

Testcase 5 Easy Hidden case  Success 10 0.0295 sec 7.53 KB

Testcase 6 Easy Hidden case  Success 10 0.0263 sec 7.59 KB

Testcase 7 Easy Hidden case  Success 10 0.0302 sec 7.5 KB

Testcase 8 Easy Hidden case  Success 10 0.0249 sec 7.62 KB

Testcase 9 Easy Hidden case  Success 10 0.027 sec 7.52 KB

No Comments

QUESTION 12 primo.c 

Coding

Correct Answer
QUESTION DESCRIPTION

/
|__| Faça um programa que verifica se um determinado número N é um número primo. Um número é primo
Score 100
se é divisível apenas por ele próprio e pela unidade. Se não for primo deve identificar o menor número pelo
qual é divisível.

Notas:
É suficiente testar até à raiz quadrada de N (pode utilizar a função sqrt da biblioteca math.h)
Em vez de calcular a raiz quadrada de N, pode calcular o quadrado do divisor.

«35»Execução de exemplo (com parciais):

C:\>primo
Funcao que verifica se um numero N e' primo:
Indique N:99
2
Numero divisível por 3

C:\>primo
Funcao que verifica se um numero N e' primo:
Indique N:97
2 3 4 5 6 7 8 9
Numero primo!

Entrada:
N - número inteiro
Saída:
Resultado, sem parciais - menor número que divide N, ou 0 no caso de N ser primo

Execução de exemplo (sem parciais):

C:\>primo
99
3
C:\>primo
97
0

CANDIDATE ANSWER

Language used: C

1 #include <math.h>
2 #include <stdio.h>
3
4 int main()
5 {
6 int numero, ndiv, nprimo=0;
7
8 scanf("%d", &numero);
9
10 if(numero<1)
11 printf("Erro: o numero tem de ser maior que zero.\n");
12 else
13 {
14 ndiv=2;
15 while (ndiv*ndiv<numero)
16 {
17 if (numero%ndiv==0)
18 {
19 printf("%d\n", ndiv);
20 nprimo=1;
21 return 0;
/
22 }
23 ndiv++;
24 }
25 if (nprimo==0)
26 printf("0");
27 }
28 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Easy Sample case  Success 5 0.0267 sec 7.61 KB

Testcase 1 Easy Sample case  Success 5 0.0256 sec 7.44 KB

Testcase 2 Easy Hidden case  Success 10 0.0496 sec 7.59 KB

Testcase 3 Easy Hidden case  Success 10 0.0327 sec 7.5 KB

Testcase 4 Easy Hidden case  Success 10 0.0264 sec 7.52 KB

Testcase 5 Easy Hidden case  Success 10 0.0306 sec 7.5 KB

Testcase 6 Easy Hidden case  Success 10 0.0282 sec 7.43 KB

Testcase 7 Easy Hidden case  Success 10 0.039 sec 7.62 KB

Testcase 8 Easy Hidden case  Success 10 0.0272 sec 7.5 KB

Testcase 9 Easy Hidden case  Success 10 0.0252 sec 7.49 KB

Testcase 10 Easy Hidden case  Success 10 0.0298 sec 7.51 KB

No Comments

QUESTION 13 triplasoma.c 

Coding

Correct Answer
QUESTION DESCRIPTION

|__| Dado um inteiro positivo N, escrever todas as decomposições distintas possíveis como soma de três
Score 120
inteiros positivos (considerar iguais as triplas com os mesmos valores mas por outra ordem). Calcular
também o número de somas distintas.

Notas:
Assumir que os números mais altos aparecem sempre primeiro.

Execução de exemplo (com parciais):

C:\>triplasoma
Escreva um numero para decompor em somas de tres parcelas.
Numero:7
5+1+1
4+2+1
3+3+1
3+2+2
Numero de somas: 4

Entrada:
N - número inteiro
Saída:
Resultado - número total de somas

Execução de exemplo (sem parciais):

C:\>triplasoma
/
C:\>triplasoma
7
4

CANDIDATE ANSWER

Language used: C

1 #include <stdio.h>
2
3 int main()
4 {
5 int v1, v2, v3, numero, somas=0;
6 //printf("Escreva um numero para decompor em somas de tres
7 parcelas.\nNumero: ");
8 scanf("%d", &numero);
9
10 v1=numero-2;
11 v3=1;
12 while (v1>=1)
13 {
14 v2=numero/2;
15 while (v2>=1)
16 {
17 if (v1>=v2 && (v1+v2)<=numero-1)
18 v3=numero-(v1+v2);
19
20 if (v1>=v2 && v2>=v3 && v1+v2+v3==numero)
21 {
22 //printf("%d+%d+%d\n",v1,v2,v3);
23 somas++;
24 }
25 v2--;
26 }
27 v1--;
28 }
29 //printf("Numero de somas: %d", somas);
30 printf("%d", somas);
}

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Medium Sample case  Success 20 0.0269 sec 7.53 KB

Testcase 1 Medium Sample case  Success 20 0.0228 sec 7.51 KB

Testcase 2 Medium Hidden case  Success 20 0.0238 sec 7.5 KB

Testcase 3 Medium Hidden case  Success 20 0.0264 sec 7.42 KB

Testcase 4 Medium Hidden case  Success 20 0.0326 sec 7.48 KB

Testcase 5 Medium Hidden case  Success 20 0.2542 sec 7.53 KB

No Comments

QUESTION 14 pi.c 

Coding

Correct Answer
QUESTION DESCRIPTION

| |C l l l d PI b fó l d R j 1/PI 2* t(2) / 9801 * SOMA(k 0 K


/
|__| Calcular o valor de PI com base na fórmula de Ramanujan: 1/PI = 2 * sqrt(2) / 9801 * SOMA(k=0...K;
Score 80
(4k)! * (1103 + 26390*k) / ( (k!)^4 * 396^(4*k) ) )

Notas:
Utilize precisão dupla
Pode utilizar a função sqrt para calcular a raiz quadrada, da biblioteca math.h

«36»Execução de exemplo:

C:\>pi
0
3.1415927300133055

Entrada:
K - inteiro com o número de passos, de 0 a K inclusive
Saída:
Resultado - valor de PI com precisão científica de 17 dígitos

CANDIDATE ANSWER

Language used: C

1 #include <math.h>
2 #include <stdio.h>
3
4 int main()
5 {
6 int k, i=0, voltas=3;
7 double valor_pi, valor_parcial, valor_acumulado=0;
8
9 valor_pi=2.*sqrt(2.)/9801.;
10
11 while (i<voltas)
12 {
13 valor_parcial=1103+26390*i;
14
15 // (4k)!
16 k=4*i;
17 while (k>0)
18 {
19 valor_parcial*=k;
20 k--;
21 }
22 // (k!)^4
23 k=i;
24 while (k>0)
25 {
26 valor_parcial/=(k*k*k*k);
27 k--;
28 }
29 // 396^(4*k)
30 k=4*i;
31 while (k>0)
32 {
33 valor_parcial/=396;
34 k--;
35 }
36 i++;
37 valor_acumulado+=valor_parcial;
38 }
39 valor_pi*=valor_acumulado;
40 //printf("\nValor de PI (%d iteracoes): %.17g\n", 3, 1/valor_pi);
41 printf("% 17g\n", 1/valor pi);
/
41 printf( %.17g\n , 1/valor_pi);
42 }

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Medium Sample case  Wrong Answer 0 0.0263 sec 7.48 KB

Testcase 1 Medium Sample case  Wrong Answer 0 0.0282 sec 7.56 KB

Testcase 2 Medium Hidden case  Success 20 0.0234 sec 7.46 KB

Testcase 3 Medium Hidden case  Success 20 0.0268 sec 7.46 KB

Testcase 4 Medium Hidden case  Success 20 0.0273 sec 7.55 KB

Testcase 5 Medium Hidden case  Success 20 0.0235 sec 7.56 KB

No Comments

QUESTION 15 formularesolvente.c 

Coding

Needs Review
QUESTION DESCRIPTION

|__| Faça um programa que peça os coeficientes de um polinómio do segundo grau, e retorna as raízes
Score 0
reais, caso existam. Adicionalmente o programa deve retornar todos os conjuntos de coeficientes inteiros,
que têm apenas raízes inteiras reais. Os coeficientes estão entre -K e K não tendo nenhum coeficiente nulo
(K é introduzido pelo utilizador e é um inteiro pequeno). Relembra-se a fórmula resolvente: ax2+bx+c=0 é
equivalente a x= (-b +-sqrt(b2 - 4ac)) / (2a)

Notas:
Para calcular a raiz quadrada, utilize a função sqrt, disponível na biblioteca math.h
Faça três ciclos um dentro do outro, um ciclo por cada um dos coeficientes, e varie a variável
iteradora entre -K e K.

Execução de exemplo (com parciais):

C:\>formularesolvente
Equacao do segundo grau a*x^2+b*x+c=0.
Indique a b c: 2 4 2
Delta: 0.000000
A equacao tem uma raiz unica, x=-1.000000

Calculo de coeficientes entre -K e K inteiros nao nulos, com raízes


inteiras.
Introduza K:2

Coeficientes de -2 a 2 inteiros nao nulos, com raízes inteiras:


[-1 -2 -1] [-1 -1 2] [-1 1 2] [-1 2 -1] [1 -2 1] [1 -1 -2] [1 1 -2] [1 2
1]
Total: 8

Entrada:
K - valor inteiro
Saída:
Coeficientes inteiros não nulos, com apenas raízes inteiras reais, um por cada linha, sempre na ordem
do menor para o maior, e da esquerda para a direita, conforme a execução de exemplo

Execução de exemplo (sem parciais):

C:\>formularesolvente
2
-1 -2 -1
-1 -1 2
/
1 1 2
-1 1 2
-1 2 -1
1 -2 1
1 -1 -2
1 1 -2
1 2 1

CANDIDATE ANSWER

Language used: C

1 #include <math.h>
2 #include <stdio.h>
3
4 int main()
5 {
6 float f_a, f_b, f_c, f_delta;
7 int int_a, int_b, int_c, int_delta, coef, contador, quadrado_perfeito;
8
9 printf("Equacao do segundo grau a*x^2+b*x+c=0.\nIndique a b c: ");
10 scanf("%f %f %f", &f_a,&f_b,&f_c);
11 //f_a=2;
12 //f_b=4;
13 //f_c=2;
14 // calculo do valor de delta
15 f_delta=f_b*f_b-4*f_a*f_c;
16 printf("Delta: %f\n", f_delta);
17 if (f_delta<0)
18 printf("A equacao nao tem raízes reais.\n");
19 else if (f_delta==0)
20 printf("A equacao tem uma raiz unica, x=%f\n", -f_b/(2*f_a));
21 else
22 printf("o valor do x pode ser %f ou %f\n",(-
23 f_b+sqrt(f_delta))/(2*f_a),(-f_b-sqrt(f_delta))/(2*f_a));
24 printf("\nCalculo de coeficientes entre -k e k inteiros nao nulos, com
25 raízes inteiras.");
26 printf("\nIntroduza k:");
27 scanf("%d", &coef);
28 //coef=2;
29 printf("\nCoeficientes de -%d a %d inteiros nao nulos, com raízes
30 inteiras:\n",coef,coef);
31 contador=0;
32 for(int_a=-coef; int_a<=coef; int_a++)
33 for(int_b=-coef; int_b<=coef; int_b++)
34 for(int_c=-coef; int_c<=coef; int_c++)
35 {
36 if(int_a==0 || int_b==0 || int_c==0)
37 continue;
38 int_delta=int_b*int_b-4*int_a*int_c;
39 if(int_delta==0 && int_a!=0 && int_b%(2*int_a)==0)
40 {
41 contador++;
42 printf(" %d %d %d\n", int_a,int_b,int_c);
43 }
44 else if (int_delta>0)
45 {
46 quadrado_perfeito=sqrt(int_delta);
47 if (quadrado_perfeito*quadrado_perfeito==int_delta &&
48 int_a!=0 && ((-int_b+quadrado_perfeito)%(2*int_a)==0 && (-int_b-
49 quadrado_perfeito)%(2*int_a)==0))
50 {
51 contador++
/
51 contador++;
52 printf(" %d %d %d\n", int_a, int_b, int_c);
}
}
}
printf("\nTotal: %d", contador);
}

TESTCASE DIFFICULTY TYPE STATUS SCORE TIME TAKEN MEMORY USED

Testcase 0 Medium Sample case  Wrong Answer 0 0.0252 sec 7.41 KB

Testcase 1 Medium Hidden case  Wrong Answer 0 0.0386 sec 7.54 KB

Testcase 2 Medium Hidden case  Wrong Answer 0 0.0278 sec 7.55 KB

Testcase 3 Medium Hidden case  Wrong Answer 0 0.0418 sec 7.41 KB

Testcase 4 Medium Hidden case  Wrong Answer 0 0.0267 sec 7.5 KB

No Comments

PDF generated at: 17 Nov 2020 18:05:20 UTC

Você também pode gostar