Neste artigo, estaremos discutindo algumas das importantes perguntas e desafios do Hackerrank em vários recrutamentos de empresas de produtos. Se você é alguém interessado em programação, então esta lista de perguntas importantes do Hackerrank é uma obrigação para resolver.
Perguntas do Hackerrank com soluções
Aqui estão algumas das perguntas mais feitas pelo Hackerrank com soluções.
- Número de ilhas usando DFS
- Problema de soma de subconjuntos
- Rato num labirinto
- Número de formas de chegar à enésima escada
- Problema de Sudoku
- Rota a matriz por K vezes
- 0-1 Problema de mochila
- Detectar um laço numa lista ligada
- Algarras redundantes
- Verificador de parênteses
- Mediana de duas matrizes ordenadas
Questão 1:
Perguntas de Amostra de Hackerrank: Bank Compare
Existem dois bancos; Banco A e Banco B. As suas taxas de juro variam. Você recebeu ofertas de ambos os bancos em termos da taxa anual de juros, posse e variações da taxa de juros durante toda a posse.
Você tem que escolher a oferta que lhe custa menos juros e rejeitar a outra. Faça o cálculo e faça uma escolha sensata.
O reembolso do empréstimo acontece com uma frequência mensal e a Prestação Mensal Equivalente (EMI) é calculada usando a fórmula dada abaixo :
EMI = EmpréstimoMontante*Retribuição de juros mensal / ( 1 – 1 / (1 +Retribuição de juros mensal)^(númeroDe Anos * 12))
Constrativos:
1 <= P <= 1000000
1 <=T <= 50
1<= N1 <= 30
1<= N2 <= 30
>
> Formato de entrada:
- Primeira linha : P – principal (Valor do empréstimo)
- Segunda linha : T – Titularidade total (em anos).
- Terceira linha : T – Titularidade total (em anos): N1 é o número de lajes de taxas de juros para um determinado período pelo Banco A. A primeira laje começa a partir do primeiro ano e a segunda laje começa a partir do final da primeira laje e assim por diante.
- Próxima linha N1 conterá a taxa de juros e seu período.
- Após as linhas N1 receberemos N2, ou seja, o número de lajes oferecidas pelo segundo banco.
- As linhas N2 seguintes são o número de lajes de taxas de juros para um determinado período pelo Banco B. A primeira laje começa a partir do primeiro ano e a segunda laje começa a partir do final da primeira laje e assim por diante.
- O período e a taxa serão delimitados por um único espaço branco.
Output Format: A sua decisão – Banco A ou Banco B.
Explicação:
Amostras de Entrada 1:
100002035 9.510 9.65 8.5310 6.95 8.55 7.9
Amostra Ouput 1:
Bank B
Amostra Input 2:
50000026313 9.53 6.910 5.6314 8.56 7.46 9.6
Sample Output 2:
Bank A
Solução:
#include <stdio.h>#include<math.h>int main() { double p,s,mi,sum,emi,bank,sq; int y,n,k,i,yrs,l=0; scanf("%lf",&p); scanf("%d",&y); for(k=0;k<2;k++) { scanf("%d",&n); sum=0; for(i=0;i<n;i++) { scanf("%d",&yrs); scanf("%lf",&s); mi=0; sq=pow((1+s),yrs*12); emi= (p*(s))/(1-1/sq); sum= sum + emi; } bank=sum; } if(bank<bank) printf("Bank A"); else printf("Bank B"); return 0;}
>
Perguntas da Amostra de Hackerrank: One Egg
“One Egg” é uma empresa de fornecimento de ovos que fornece ovos a retalhistas. Eles têm classes M de ovos. Cada classe pode ter N número de ovos (N pode ser o mesmo ou pode variar de classe para classe). Eles aceitam pedidos via correio para X ovos. Em resposta, eles confirmam se podem fornecer os ovos com uma nota “Obrigado” e o número de ovos ou com uma nota “Desculpe” e o número de ovos que eles podem fornecer. Eles também mencionam a repartição dos ovos pela classe que fornecerão. Os ovos encomendados são ajustados em relação às diferentes classes com o maior número de ovos ajustados primeiro, depois o saldo é ajustado em relação ao segundo mais alto e assim por diante. A empresa também é um pouco supersticiosa. Se o número de ovos encomendados for maior ou igual ao número total de ovos em estoque, eles retêm um ovo e respondem de volta com a nota “Desculpe” com o número total de ovos em estoque menos um e a divisão dos ovos por classe.
Nota: Se as classes tiverem o mesmo número de ovos então a classe entrada primeiro deve ser selecionada para ajustar.
Formato de entrada:
Primeira linha contém dois números inteiros separados por espaço denotando os respectivos valores de M (o número de classes de ovos) e X, o número de ovos ordenados As linhas M seguintes contêm um número inteiro cada uma indicando o número de ovos disponíveis em cada classe
Output Format:
Primeira linha deve ser, se X for menor que o número total de Ovos então Imprima ” Obrigado, seu pedido de X ovos é aceito” Ou se X for maior ou igual ao número total de Ovos então imprima ” ” Desculpe, só podemos fornecer (número total de Ovos em estoque -1) ovos” T galinha linhas M com 3 colunas: Primeira coluna – Número de ovos disponíveis em cada classe Segunda coluna – Ovos alocados contra cada classe para essa ordem Terceira coluna – Balanço Ovos contra cada classe
Constraints:
1 ≤ M ≤ 20 N ≥ 1 X ≥ 1
Amostras Entrada 1:
5 150 50 15 80 10 5
Explicação da Amostra 1:
Thank you, your order for 150 eggs are accepted 50 50 0 15 15 0 80 80 0 10 5 5 5 0 5
Explicação:
Pedido total de 150 ovos é inferior ao número total de ovos 50+15+80+10+5 = 160. Daí a mensagem de agradecimento. 150 foi primeiramente ajustada contra a Classe com o primeiro maior número de ovos 80. O saldo de 150-80 = 70 foi ajustado em relação à segunda classe mais alta de 50. Saldo de 70-50 = 20 e depois ajustado contra 15. Saldo de 20-15 = 5, depois ajustado contra 10, deixando para trás 5 ovos nessa classe.
Amostras de Entrada 2:
4 250 80 50 70 20
>Amostras de Saída 2:
Sorry, we can only supply 219 eggs 80 80 0 50 50 0 70 70 0 20 19 1
Explicação:
> A ordem total de 250 ovos foi maior que o número total de ovos 80+50+70+20 = 220. Daí a mensagem de desculpas. 250 foi primeiramente ajustada contra a Classe com o primeiro maior número de ovos 80. O saldo de 250-80 = 170 foi ajustado em relação à segunda maior classe de 70. Saldo de 170-70 = 100 foi então ajustado contra 50. Saldo de 100-50 = 50, depois ajustado contra 20. Como o Saldo é maior do que a última classe de ovos, todos os ovos, excepto um, são deixados nessa última classe.
Solução:
#include <stdio.h>int main() {int m,x,i,a,sum=0,s;scanf("%d %d",&m,&x);for(i=0;i<m;i++){scanf("%d",&a);sum=sum+a;}if(sum>x) printf("Thank you, your order for %d eggs are accepted\n",x);else{ printf("Sorry, we can only supply %d eggs\n",sum-1); x=sum-1;}for(i=0;i<m;i++){ if(x>=a) { printf("%d\t%d\t%d\n",a,a,0); x=x-a; } else if(x<a) { s=a-x; printf("%d\t%d\t%d\n",a,x,s); x=0; } else if(x==0) printf("%d\t%d\t%d\n",a,0,a); } return 0;}
Questão 3:
Perguntas de Amostra de Hackerrank: Milk Man and His Bottles
A Milkman serve leite em garrafas embaladas de tamanhos variados. Os tamanhos possíveis das garrafas são {1, 5, 7 e 10} litros. Ele quer fornecer a quantidade desejada utilizando o menor número possível de garrafas, independentemente do tamanho. Seu objetivo é ajudá-lo a encontrar o número mínimo de garrafas necessárias para suprir a demanda de leite.
Formato de entrada:
- A primeira linha contém o número de caixas de teste N
- Nextas linhas N, cada uma contendo um número inteiro positivo Li que corresponde à demanda de leite.
Formato de saída:
Para cada entrada Li, imprimir o número mínimo de garrafas necessárias para satisfazer a demanda
Constraints:
1 <= N <= 1000 Li > 0 1 <= i <= N
>Amostras de Entrada e Saída:
2 7
>
Explicação:
Número de casos de teste é 2
Para 17 = 10*1 + 7*1 = 2
Para 65 = 10*6 + 5*1 = 7
Poucos mais exemplos:
Para 99 = 10*9 + 7*1 + 1*2 = 12
Para 63 = 10*6 + 1*3 =9
Solução:
#include <stdio.h>int main(){ int n,b=0,i,m,s=0; scanf("%d",&m); for( i=0;i<m;i++) { scanf("%d",&n); b=n/10; n=n%10; s=s+b; b=0; b=n/7; n=n%7; s=s+b; b=0; b=n/5; n=n%5; s=s+b; b=0; b=n/1; s=s+b; printf("%d\n",s); s=0; b=0; } return 0;}
Questão 4:
Perguntas de Amostra de Hackerrank: Bride Hunting
>
Sam é um solteirão elegível. Ele decide se estabelecer na vida e começar uma família. Ele vai à caça da noiva. Ele quer casar com uma menina que tem pelo menos uma das 8 qualidades mencionadas abaixo:-
1) A menina deve ser rica.
2) A menina deve ser uma Engenheira/Doutora.
3) A menina deve ser bonita.
4) A menina deve ser de altura 5.3″.
5) A menina deve estar trabalhando em um MNC.
6) A menina deve ser um extrovertido.
7) A menina não deve ter óculos.
8) A menina deve ser gentil e honesta.
> Ele está em busca de uma noiva que tenha algumas ou todas as 8 qualidades mencionadas acima. Na caça à noiva, ele pode encontrar mais de uma candidata para ser sua esposa.
Nesse caso, ele quer escolher uma menina cuja casa seja a mais próxima de sua casa. Encontre uma noiva para Sam que tenha o máximo de qualidades. Se no caso, houver mais de um candidato que esteja a igual distância da casa de Sam; então
print “”Poligamia não permitida””.
No caso de não haver nenhuma rapariga adequada que se encaixe no critério, então imprima “”Nenhuma rapariga adequada encontrada”””
Dada uma Matriz N*M, a casa de Sam está em (1, 1). Na mesma matriz, a localização de uma rapariga núbil é também indicada por 1. Assim, 1 no local (1, 1) não deve ser considerado como a localização de uma rapariga núbil.
As qualidades dessa rapariga, segundo o critério de Sam, têm de ser descodificadas a partir do número de vizinhos não núbil (máx. 8 vias) que ela tem. Semelhante à condição acima, 1 no local (1, 1) não deve ser considerada como a qualidade de uma Menina. Veja a seção Exemplo para obter um melhor entendimento.
Find Sam, uma Noiva adequada e imprima a linha e coluna da noiva, e descubra o número de qualidades que a Noiva possui.
NOTE: A distância é calculada em número de lúpulos em qualquer direção, ou seja (Esquerda, Direita, Para cima, Para baixo e Diagonal)
Constraints:
2 <= N,M <= 10^2
Formato de entrada:
- Primeira Linha contém a linha (N) e a coluna (M) das casas.
- Próxima Linha N contém os dados sobre as meninas e suas qualidades.
Formato de saída:
Conterá a linha e a coluna da noiva, e o número de qualidades que a noiva possui separadas por dois pontos (i.e. :).
Amostras de Entrada 1:
2 9
1 0 1 1 1 1 1 1 1 1
0 0 1 0 1 0 1 0 0 1
>Amostras de Saída 1:
Explicação:
A rapariga e as qualidades estão presentes em (1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,4),(2,6),(2,9).
A menina presente em (1,3) tem 2 qualidades (i.e. (1,4)e (2,4)).
A menina presente em (1,4) tem 2 qualidades.
A Noiva presente em (1,6) tem 2 qualidades.
A noiva presente em (1,7) tem 3 qualidades.
A noiva presente em (1,8) tem 3 qualidades.
A noiva presente em (1,9) tem 2 qualidades.
A noiva presente em (2,4) tem 2 qualidades.
A noiva presente em (2,6) tem 2 qualidades.
A Noiva presente em (2,9) tem 2 qualidades.
Como vemos, há dois concorrentes que têm qualidades máximas, um está em (1,7) e outro em (1,8).
A menina que está mais próxima da casa de Sam está em (1,7). Portanto, ela é a noiva.
Hence, a saída será 1:7:3.
Amostras de Entrada 2:
6 6
1 0 0 0 0 0
0 0 0 0 0 0
0 0 1 1 1 0
0 0 1 1 1 1 0
0 1 1 1 1 0
0 0 0 0 0 0 0 0
Sample Output 2:
Explicação:
A noiva e as qualidades estão presentes em (3,3),(3,4),(3,5),(4,3),(4,4),(4,5),(5,3),(5,4),(5,5)
A noiva presente em (3,3) tem 3 qualidades (i.e. (3,4),(4,3) e (4,4)).
A Noiva presente em (3,4) tem 5 qualidades.
A Noiva presente em (3,5) tem 3 qualidades.
A Noiva presente em (4,3) tem 5 qualidades.
A Noiva presente em (4,4) tem 8 qualidades.
A Noiva presente em (4,5) tem 5 qualidades.
A Noiva presente em (5,3) tem 3 qualidades.
A Noiva presente em (5,4) tem 5 qualidades.
A Noiva presente em (5,5) tem 3 qualidades.
Como vemos, a menina presente em (4,4) tem o número máximo de Qualidades. Portanto, ela é a noiva.
Hence, a saída será 4:4:8.
Solução:
#include<stdio.h>int main(){ int n,m,i,g,j,p,q,max=0,cnt=0,k=1,c=0,u=1,x,y,t1,min=0, sc,e,f,ct=0,a,count=0,t2=0,t=0; scanf("%d %d",&n,&m); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&g); } } g=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cnt=0; if(g==1) { t++; for(p=i-1;p<=i+1;p++) { for(q=j-1;q<=j+1;q++) { if(g==1) { cnt++; } } }cnt=cnt-1; a=cnt; k++; } } } for(k=1;k<=t;k++) { if(a>max) max=a; } if(max==0) { printf("No suitable girl found"); return 0; } for(k=1;k<=t;k++) { if(a==max) c++; } for(k=1;k<=t;k++) { t2=0; if(a==max) { for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(g==1) t2++; if(t2==k) { x=i; y=j; u++; } } } } } t1=u-1; if(c==1) printf("%d:%d:%d",x,y,max); else { for(u=1;u<=t1;u++) { sc=sqrt(((x-1) * (x-1)) + ((y-1)*(y-1)));; } min=sc; for(u=1;u<=t1;u++) { if(sc<min) min=sc; } for(u=1;u<=t1;u++) { if(sc==min) count++; } if(count>1) printf("Polygamy not allowed"); if(count==1) { for(u=1;u<=t1;u++) { if(sc==min) printf("%d:%d:%d",x,y,max); } } } return 0;}
Vocês também podem verificar estas:
- Prática de estruturas de dados & Questões de algoritmos
- Prática de questões de programação C