Publiceret den 12 mar 2020

I denne artikel vil vi diskutere nogle af de vigtige Hackerrank-spørgsmål og udfordringer, der stilles i forskellige produktfirmaers ansættelser. Hvis du er en person, der er interesseret i programmering, så er denne liste over vigtige Hackerrank-spørgsmål et must at løse.

Hackerrank-spørgsmål med løsninger

Her er nogle af de mest stillede Hackerrank-spørgsmål med løsninger.

  • Antal øer ved hjælp af DFS
  • Subset Sum Problem
  • Rat i en labyrint problem
  • Antal måder at nå den niende trappe på
  • Sudoku problem
  • Rotér matricen med K gange
  • 0-1 Knapsack-problem
  • Detekter en løkke i en linket liste
  • Redundante parenteser
  • Kontrol af balancerede parenteser
  • Medianen af to sorterede arrays

Spørgsmål 1:

Eksempel på Hackerrank-spørgsmål:

Bank sammenligne

Der er to banker; Bank A og Bank B. Deres rentesatser varierer. Du har modtaget tilbud fra begge banker med hensyn til den årlige rente, løbetid og variationer i rentesatsen over hele løbetiden.

Du skal vælge det tilbud, der koster dig mindst i rente, og afvise det andet. Gør beregningen og tag et klogt valg.

Lånet tilbagebetales med en månedlig frekvens, og Equated Monthly Installment (EMI) beregnes ved hjælp af nedenstående formel :

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

Begrænsninger:

1 <= P <= 1000000

1 <=T <= 50

1<= N1 <= 30

1<= N2 <= 30

Inputformat:

  • Første linje: P – hovedstol (lånebeløb)
  • Sidste linje: T – samlet løbetid (i år).
  • Tredje linje: N1 er antallet af rentesatser for en given periode fra bank A. Første rate starter fra det første år, og den anden rate starter fra slutningen af den første rate osv.
  • Næste N1-linje vil indeholde rentesatsen og deres periode.
  • Efter N1-linjerne vil vi få N2, dvs. antallet af rentesatser, der tilbydes af den anden bank.
  • Næste N2-linje er antallet af rentesatser for en given periode fra bank B. Den første rentesats starter fra det første år, og den anden rentesats starter fra slutningen af den første rentesats osv.
  • Perioden og renten vil blive afgrænset af et enkelt hvidt mellemrum.

Outputformat: Din beslutning – enten bank A eller bank B.

Oplysning:

Stikprøveindgang 1:

100002035 9.510 9.65 8.5310 6.95 8.55 7.9

Stikprøveudgang 1:

Bank B

Stikprøveindgang 2:

Stikprøveindgang 2:

50000026313 9.53 6.910 5.6314 8.56 7.46 9.6

Proveudgang 2:

Bank A

Løsning:

Løsning:

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

Eksempel på Hackerrank-spørgsmål:

One Egg

“One Egg” er et ægleverandørfirma, der leverer æg til detailhandlere. De har M klasser af æg. Hver klasse kan have N antal æg (N kan være det samme eller kan variere fra klasse til klasse). De accepterer bestilling pr. post af X æg. Som svar bekræfter de, om de kan levere æggene med en “Tak”-meddelelse og antallet af æg eller med en “Beklager”-meddelelse og det antal æg, de kan levere. De oplyser også, hvor mange æg de vil levere i de forskellige klasser. De bestilte æg justeres i forhold til de forskellige klasser, idet det største antal æg justeres først, hvorefter restbeløbet justeres i forhold til den næsthøjeste klasse og så videre. Virksomheden er også en smule overtroisk. Hvis antallet af bestilte æg er større end eller lig med det samlede antal æg på lager, beholder de et æg og svarer tilbage med en “beklager”-note med det samlede antal æg på lager minus et og en opdeling af æggene efter klasse.

Note: Hvis klasserne har det samme antal æg, skal den klasse, der er indtastet først, vælges til justering.

Input Format:

Første linje indeholder to mellemrumsadskilte hele tal, der angiver de respektive værdier af M (antallet af klasser af æg) og X, antallet af bestilte æg De følgende M linjer indeholder hver et helt tal, der angiver antallet af æg, der er til rådighed i hver klasse

Outputformat:

Outputformat:

Outputformat:

Første linje skal være: Hvis X er mindre end det samlede antal æg, så udskriv ” Tak, din bestilling på X æg er accepteret” Ellers hvis X er større end eller lig med det samlede antal æg, så udskriv ” ” Beklager, vi kan kun levere (det samlede antal æg på lager -1) æg” T hen M linjer med 3 kolonner: Første kolonne – Antal æg til rådighed i hver klasse Anden kolonne – Æg tildelt mod hver klasse for den pågældende ordre Tredje kolonne – Saldo Æg mod hver klasse

Begrænsninger:

1 ≤ M ≤ 20 N ≥ 1 X ≥ 1

Stikprøve Input 1:

5 150 50 15 80 10 5 

Sample Output 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 

forklaring:

Den samlede rækkefølge på 150 æg er mindre end det samlede antal æg 50+15+80+10+5 = 160. Derfor er der en Tak-meddelelse. 150 blev først justeret mod Klasse med det første højeste antal æg 80. Restbeløbet på 150-80 = 70 blev justeret mod den næsthøjeste klasse med 50 æg. Saldo på 70-50 = 20 blev derefter justeret mod 15. Saldoen 20-15 = 5 blev derefter justeret mod 10, så der var 5 æg tilbage i denne klasse.

Stikprøve input 2:

4 250 80 50 70 20 

Stikprøve output 2:

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

Forklaring:

Den samlede bestilling på 250 æg var større end det samlede antal æg 80+50+70+20 = 220. Derfor den beklagelige meddelelse. 250 blev først justeret mod Klasse med det første højeste antal æg 80. Restbeløb på 250-80 = 170 blev justeret mod den næsthøjeste klasse med 70 æg. Saldo på 170-70 = 100 blev derefter justeret mod 50. Saldo på 100-50 = 50 blev derefter justeret mod 20. Da saldoen er større end den sidste ægklasse, er alle æg på nær ét tilbage i den sidste klasse.

Løsning:

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

Spørgsmål 3:

Eksempel på Hackerrank-spørgsmål: Mælkemand og hans flasker

En mælkemand serverer mælk i flasker af forskellig størrelse. De mulige størrelser på flaskerne er {1, 5, 7 og 10} liter. Han ønsker at levere den ønskede mængde ved hjælp af så få flasker som muligt uanset størrelsen. Dit mål er at hjælpe ham med at finde det mindste antal flasker, der er nødvendigt for at levere den givne efterspørgsel efter mælk.

Inputformat:

  • Den første linje indeholder antallet af testtilfælde N
  • De næste N linjer indeholder hver et positivt heltal Li, der svarer til efterspørgslen efter mælk.

Outputformat:

For hvert input Li udskrives det mindste antal flasker, der kræves for at opfylde efterspørgslen

Kravsætninger:

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

Stikprøve på input og output:

2 7

Forklaring:

Forklaringer:

Antal af testtilfælde er 2

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

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

Få flere eksempler:

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

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

Løsning:

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

Spørgsmål 4:

Stikprøve på Hackerrank-spørgsmål: Brudejagt

Sam er en egnet ungkarl. Han beslutter sig for at slå sig ned i livet og stifte en familie. Han går på brudejagt. Han ønsker at gifte sig med en pige, der har mindst én af de 8 kvaliteter, der er nævnt nedenfor:-

1) Pigen skal være rig.

2) Pigen skal være ingeniør/læge.

3) Pigen skal være smuk.

4) Pigen skal være 5,3″ høj.

5) Pigen bør arbejde i en MNC.

6) Pigen bør være udadvendt.

7) Pigen bør ikke have briller.

8) Pigen bør være venlig og ærlig.

Han er på jagt efter en brud, der har nogle af eller alle de 8 ovennævnte kvaliteter. På brudejagten kan han finde mere end én bejler til at blive hans kone.

I så fald ønsker han at vælge en pige, hvis hus er tættest på hans hus. Find en brud til Sam, som har flest mulige kvaliteter. Hvis der i givet fald er flere kandidater, som er lige langt fra Sams hus; så

print “”Polygami ikke tilladt””.

Hvis der ikke er nogen egnet pige, der opfylder kriterierne, så udskriv “”Ingen egnet pige fundet””

Givet en matrix N*M, ligger Sams hus på (1, 1). Det betegnes med 1. I samme matrix betegnes placeringen af en ægteskabsegnet pige også med 1. Derfor bør 1 på placeringen (1, 1) ikke betragtes som placeringen af en ægteskabsegnet piges placering.

Denne piges kvaliteter, i henhold til Sam”s kriterier, skal afkodes ud fra antallet af ikke-nul naboer (max 8-vejs), hun har. I lighed med ovenstående betingelse bør 1 på placering (1, 1) ikke betragtes som en piges kvalitet. Se afsnittet Eksempel for at få en bedre forståelse.

Find Sam, en passende Brud og udskriv brudens række og kolonne, og find ud af antallet af kvaliteter, som Bruden besidder.

BEMÆRK: Afstanden beregnes i antal hop i enhver retning, dvs. (Venstre, højre, opad, nedad og diagonalt)

2 <= N,M <= 10^2

Inputformat:

  • Første linje indeholder husenes række (N) og kolonne (M).
  • De næste N linjer indeholder data om pigerne og deres kvaliteter.

Outputformat:

Det vil indeholde række og kolonne for bruden og antallet af kvaliteter, som bruden besidder, adskilt af et kolon (dvs. :).

Eksempel på input 1:

2 9

1 0 1 1 1 0 1 1 1 1 1 1

0 0 0 0 1 0 1 0 0 1 0 1 1

Eksempel på output 1:

Forklaring:

Pigen og kvaliteterne er til stede ved (1,3),(1,4),(1,4),(1,6),(1,7),(1,8),(1,8),(1,9),(2,4),(2,6),(2,9).

Pigen, der er til stede ved (1,3), har 2 kvaliteter (dvs. (1,4)og (2,4)).

Pigen, der er til stede ved (1,4), har 2 kvaliteter.

Bruden, der er til stede ved (1,6), har 2 kvaliteter.

Bruden, der er til stede på (1,7), har 3 kvaliteter.

Bruden, der er til stede på (1,8), har 3 kvaliteter.

Bruden, der er til stede på (1,9), har 2 kvaliteter.

Bruden, der er til stede på (2,4), har 2 kvaliteter.

Bruden, der er til stede på (2,6), har 2 kvaliteter.

Bruden, der er til stede ved (2,9), har 2 kvaliteter.

Som vi ser, er der to kandidater, der har maksimalt antal kvaliteter, den ene er ved (1,7) og den anden ved (1,8).

Pigen, der er tættest på Sams hus, er ved (1,7). Derfor er hun bruden.

Dermed vil resultatet være 1:7:3.

Stikprøveindgang 2:

6 6

1 0 0 0 0 0

0 0 0 0 0 0

0 0 1 1 1 0

0 0 0 1 1 1 1 1 0

0 0 1 1 1 1 1 0

0 0 0 0 0 0 0

Stikprøveudgang 2:

Oplysning:

Bruden og kvaliteterne er til stede ved (3,3),(3,4),(3,5),(4,3),(4,4),(4,5),(5,3),(5,4),(5,4),(5,5)

Bruden, der er til stede ved (3,3), har 3 kvaliteter (dvs.dvs. (3,4),(4,3) og (4,4)).

Bruden, der er til stede ved (3,4), har 5 kvaliteter.

Bruden, der er til stede ved (3,5), har 3 kvaliteter.

Bruden, der er til stede ved (4,3), har 5 kvaliteter.

Bruden, der er til stede ved (4,4), har 8 kvaliteter.

Bruden, der er til stede ved (4,5), har 5 kvaliteter.

Bruden, der er til stede i (5,3), har 3 kvaliteter.

Bruden, der er til stede i (5,4), har 5 kvaliteter.

Bruden, der er til stede i (5,5), har 3 kvaliteter.

Som vi ser, har pigen, der er til stede i (4,4), det maksimale antal kvaliteter. Derfor er hun bruden.

Dermed vil resultatet være 4:4:8.

Løsning:

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

Du kan også tjekke disse:

  • Must Practice Data Structures & Algorithms questions
  • Must Practice C programming questions
Hvis du har feedback på denne artikel og ønsker at forbedre den, kan du skrive til [email protected]

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.