Pubblicato il 12 Mar 2020

In questo articolo, discuteremo alcune delle importanti domande e sfide di Hackerrank poste in vari reclutamenti di società di prodotti. Se sei qualcuno interessato alla programmazione, allora questa lista di importanti domande Hackerrank è un must da risolvere.

Domande Hackerrank con soluzioni

Ecco alcune delle domande Hackerrank più poste con soluzioni.

  • Numero di isole usando DFS
  • Problema della somma dei sottoinsiemi
  • Problema del topo in un labirinto
  • Numero di modi per raggiungere l’ennesima scala
  • Problema del Sudoku
  • Ruota la matrice di K volte
  • 0-1 Problema Knapsack
  • Rileva un ciclo in una lista collegata
  • Bracciali ridondanti
  • Controlla le parentesi bilanciate
  • Mediana di due array ordinati

Questione 1:

Campione di domande Hackerrank: Bank Compare

Ci sono due banche; la Banca A e la Banca B. I loro tassi di interesse variano. Avete ricevuto offerte da entrambe le banche in termini di tasso d’interesse annuale, durata e variazioni del tasso d’interesse sull’intera durata.

Dovete scegliere l’offerta che vi costa meno interessi e rifiutare l’altra. Fate il calcolo e fate una scelta saggia.

Il rimborso del prestito avviene con una frequenza mensile e la rata mensile equivalente (EMI) è calcolata con la formula seguente:

EMI = loanAmount * monthlyInterestRate / ( 1 – 1 / (1 + monthlyInterestRate)^(numberOfYears * 12))

Constraints:

1 <= P <= 1000000

1 <=T <= 50

1<= N1 <= 30

1<= N2 <= 30

Formato di input:

  • Prima linea: P – capitale (importo del prestito)
  • Seconda linea: T – Durata totale (in anni).
  • Terza linea: N1 è il numero di lastre di tassi di interesse per un dato periodo dalla Banca A. La prima lastra inizia dal primo anno e la seconda lastra inizia dalla fine della prima lastra e così via.
  • La prossima linea N1 conterrà il tasso di interesse e il loro periodo.
  • Dopo N1 linee riceveremo N2 cioè il numero di lastre offerte dalla seconda banca.
  • Successivamente N2 linee sono il numero di lastre di tassi di interesse per un dato periodo dalla Banca B. La prima lastra inizia dal primo anno e la seconda lastra inizia dalla fine della prima lastra e così via.
  • Il periodo e il tasso saranno delimitati da un singolo spazio bianco.

Output Format: La tua decisione – o la Banca A o la Banca B.

Spiegazione:

Input campione 1:

100002035 9.510 9.65 8.5310 6.95 8.55 7.9

Output 1 del campione:

Bank B

Ingresso campione 2:

50000026313 9.53 6.910 5.6314 8.56 7.46 9.6

Uscita campione 2:

Bank A

Soluzione:

#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;}

Campione domande Hackerrank: One Egg

“One Egg” è un’azienda che fornisce uova ai rivenditori. Hanno M classi di uova. Ogni classe può avere N numero di uova (N può essere lo stesso o può variare da classe a classe). Accettano ordini via posta per X uova. In risposta, confermano se possono fornire le uova con una nota “Grazie” e il numero di uova o con una nota “Mi dispiace” e il numero di uova che possono fornire. Menzionano anche la ripartizione delle uova per la classe che forniranno. Le uova ordinate vengono aggiustate rispetto alle diverse classi, con il maggior numero di uova aggiustato per primo, poi il saldo viene aggiustato rispetto al secondo più alto e così via. L’azienda è anche un po’ superstiziosa. Se il numero di uova ordinate è maggiore o uguale al numero totale di uova in magazzino, allora trattengono un uovo e rispondono con la nota “Sorry” con il numero totale di uova in magazzino meno uno e la ripartizione delle uova per classe.

Nota: Se le classi hanno lo stesso numero di uova, allora la classe inserita per prima dovrebbe essere selezionata per regolare.

Formato di input:

La prima riga contiene due interi separati da spazio che denotano i rispettivi valori di M (il numero di classi di uova) e X, il numero di uova ordinate Le seguenti M righe contengono un intero ciascuna che indica il numero di uova disponibili in ogni classe

Formato output:

La prima linea dovrebbe essere, se X è inferiore al numero totale di uova allora stampa ” Grazie, il suo ordine per X uova è accettato” Altrimenti se X è maggiore o uguale al numero totale di uova allora stampa ” ” Spiacenti, possiamo fornire solo (numero totale di uova in magazzino -1) uova” T hen M linee con 3 colonne: Prima colonna – Numero di uova disponibili in ogni classe Seconda colonna – Uova assegnate contro ogni classe per quell’ordine Terza colonna – Uova di bilanciamento contro ogni classe

Constraints:

1 ≤ M ≤ 20 N ≥ 1 X ≥ 1

Sample Input 1:

5 150 50 15 80 10 5 

Uscita campione 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 

Spiegazione:

L’ordine totale di 150 uova è inferiore al numero totale di uova 50+15+80+10+5 = 160. Da qui il messaggio di ringraziamento. 150 è stato prima aggiustato contro la classe con il primo numero più alto di uova 80. Il saldo di 150-80 = 70 è stato aggiustato contro la seconda classe più alta di 50. Saldo di 70-50 = 20 poi aggiustato contro 15. Saldo di 20-15 = 5 poi regolato contro 10 lasciando 5 uova in quella classe.

Input campione 2:

4 250 80 50 70 20 

Uscita campione 2:

Sorry, we can only supply 219 eggs 80 80 0 50 50 0 70 70 0 20 19 1 

Spiegazione:

L’ordine totale di 250 uova era maggiore del numero totale di uova 80+50+70+20 = 220. Da qui il messaggio di scusa. 250 è stato prima aggiustato contro la classe con il primo numero più alto di uova 80. Il saldo di 250-80 = 170 è stato aggiustato contro la seconda classe più alta di 70. Il saldo di 170-70 = 100 è stato poi aggiustato contro 50. Il saldo di 100-50 = 50 è stato poi aggiustato contro 20. Poiché il saldo è maggiore dell’ultima classe di uova, tutte le uova, tranne una, sono rimaste in quell’ultima classe.

Soluzione:

#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;}

Questione 3:

Campione di domande Hackerrank: Il lattaio e le sue bottiglie

Un lattaio serve il latte in bottiglie confezionate di varie dimensioni. Le possibili dimensioni delle bottiglie sono {1, 5, 7 e 10} litri. Vuole fornire la quantità desiderata usando il minor numero possibile di bottiglie, indipendentemente dalle dimensioni. Il tuo obiettivo è quello di aiutarlo a trovare il numero minimo di bottiglie necessarie per fornire la domanda di latte data.

Formato di input:

  • La prima linea contiene il numero di casi di prova N
  • Seguono N linee, ciascuna contiene un intero positivo Li che corrisponde alla domanda di latte.

Formato dell’output:

Per ogni input Li, stampa il numero minimo di bottiglie richiesto per soddisfare la domanda

Constraints:

1 <= N <= 1000 Li > 0 1 <= i <= N

Campione di input e output:

2 7

Spiegazione:

Il numero di casi di test è 2

Per 17 = 10*1 + 7*1 = 2

Per 65 = 10*6 + 5*1 = 7

Pochi altri esempi:

Per 99 = 10*9 + 7*1 + 1*2 = 12

Per 63 = 10*6 + 1*3 =9

Soluzione:

#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;}

Domanda 4:

Campione domande Hackerrank: Bride Hunting

Sam è un buon partito. Decide di sistemarsi nella vita e mettere su famiglia. Va a caccia di una sposa. Vuole sposare una ragazza che abbia almeno una delle 8 qualità menzionate qui sotto:-

1) La ragazza dovrebbe essere ricca.

2) La ragazza dovrebbe essere un ingegnere/dottore.

3) La ragazza dovrebbe essere bella.

4) La ragazza dovrebbe essere alta 5.3″.

5) La ragazza dovrebbe lavorare in un MNC.

6) La ragazza dovrebbe essere estroversa.

7) La ragazza non dovrebbe avere gli occhiali.

8) La ragazza dovrebbe essere gentile e onesta.

E’ alla ricerca di una sposa che abbia alcune o tutte le 8 qualità sopra menzionate. Durante la caccia alla sposa, può trovare più di una contendente per essere sua moglie.

In questo caso, vuole scegliere una ragazza la cui casa è più vicina alla sua. Trova una sposa per Sam che abbia il massimo delle qualità. Se nel caso, ci sono più di una contendente che sono alla stessa distanza dalla casa di Sam; allora

stampa “”Poligamia non permessa””.

Nel caso in cui non ci sia una ragazza adatta che soddisfi i criteri, allora stampa “”Nessuna ragazza adatta trovata””

Data una matrice N*M, la casa di Sam è a (1, 1). Essa è indicata con 1. Nella stessa matrice, la posizione di una ragazza sposabile è anche indicata con 1. Quindi 1 nella posizione (1, 1) non deve essere considerata come la posizione di una ragazza sposabile.

Le qualità di quella ragazza, secondo i criteri di Sam, devono essere decodificate dal numero di vicini non nulli (max 8 vie) che ha. Simile alla condizione precedente, 1 nella posizione (1, 1) non dovrebbe essere considerato come la qualità di una ragazza. Vedi la sezione Esempio per capire meglio.

Trova Sam, una Sposa adatta e stampa la riga e la colonna della sposa, e scopri il numero di qualità che la Sposa possiede.

NOTA: La distanza è calcolata in numero di salti in qualsiasi direzione cioè (sinistra, destra, su, giù e diagonale)

Constraints:

2 <= N,M <= 10^2

Input Format:

  • La prima riga contiene la riga (N) e la colonna (M) delle case.
  • Le N righe successive contengono i dati sulle ragazze e le loro qualità.

Formato output:

Conterrà la riga e la colonna della sposa, e il numero di qualità che la sposa possiede separate da un due punti (cioè :).

Sample Input 1:

2 9

1 0 1 1 0 1 1 1 1 1

0 0 1 0 1 0 0 1

Sample Output 1:

Spiegazione:

La ragazza e le qualità sono presenti a (1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,4),(2,6),(2,9).

La ragazza presente a (1,3) ha 2 qualità (cioè (1,4)e (2,4)).

La ragazza presente a (1,4) ha 2 qualità.

La sposa presente a (1,6) ha 2 qualità.

La sposa presente a (1,7) ha 3 qualità.

La sposa presente a (1,8) ha 3 qualità.

La sposa presente a (1,9) ha 2 qualità.

La sposa presente a (2,4) ha 2 qualità.

La sposa presente a (2,6) ha 2 qualità.

La sposa presente a (2,9) ha 2 qualità.

Come vediamo, ci sono due contendenti che hanno il massimo delle qualità, uno è a (1,7) e un altro a (1,8).

La ragazza che è più vicina alla casa di Sam è a (1,7). Quindi, lei è la sposa.

Quindi, il risultato sarà 1:7:3.

Ingresso campione 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 0

0 0 1 1 1 0

0 0 0 0 0

Uscita campione 2:

Spiegazione:

La sposa e le qualità sono presenti a (3,3),(3,4),(3,5),(4,3),(4,4),(4,5),(5,3),(5,4),(5,5)

La sposa presente a (3,3) ha 3 qualità (i.cioè (3,4),(4,3) e (4,4)).

La Sposa presente a (3,4) ha 5 qualità.

La Sposa presente a (3,5) ha 3 qualità.

La Sposa presente a (4,3) ha 5 qualità.

La Sposa presente a (4,4) ha 8 qualità.

La Sposa presente a (4,5) ha 5 qualità.

La sposa presente in (5,3) ha 3 qualità.

La sposa presente in (5,4) ha 5 qualità.

La sposa presente in (5,5) ha 3 qualità.

Come vediamo, la ragazza presente in (4,4) ha il massimo numero di Qualità. Quindi, lei è la sposa.

Quindi, l’uscita sarà 4:4:8.

Soluzione:

#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;}

Puoi anche controllare questi:

  • Deve fare pratica con le strutture di dati & Domande sugli algoritmi
  • Deve fare pratica con le domande sulla programmazione C
Se hai qualche feedback su questo articolo e vuoi migliorarlo, scrivi a [email protected]

.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.