Publicado em 12 Mar 2020

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
Se você tem algum feedback sobre este artigo e quer melhorar isto, por favor escreva para [email protected]

Deixe uma resposta

O seu endereço de email não será publicado.