Published on 12 Mar 2020

Tässä artikkelissa keskustelemme joistakin tärkeistä Hackerrank-kysymyksistä ja -haasteista, joita kysytään erilaisissa rekrytoinneissa eri tuoteyrityksissä. Jos olet joku, joka on kiinnostunut ohjelmoinnista, niin tämä lista tärkeistä Hackerrank-kysymyksistä on pakko ratkaista.

Hackerrank-kysymykset ja ratkaisut

Tässä on joitain yleisimmin kysyttyjä Hackerrank-kysymyksiä ja niiden ratkaisuja.

  • Saarten lukumäärä DFS:n avulla
  • Subset Sum Problem
  • Rat in a labyrintti -ongelma
  • Tapojen lukumäärä, joilla pääsee n:nnelle portaalle
  • Sudoku -ongelma
  • Kierretään matriisia K-kertaisesti
  • 0-1 Knapsack-ongelma
  • Havaitse silmukka linkitetyssä listassa
  • Redundantit hakasulkeet
  • Tasapainoisten sulkeiden tarkistusohjelma
  • Kahden lajitellun matriisin mediaani

Kysymys 1:

Esimerkki Hackerrank-kysymyksistä: Pankkien vertailu

On kaksi pankkia; pankki A ja pankki B. Niiden korot vaihtelevat. Olet saanut molemmilta pankeilta tarjouksia, jotka koskevat vuotuista korkoa, juoksuaikaa ja korkokannan vaihtelua koko juoksuaikana.

Sinun on valittava se tarjous, joka maksaa sinulle vähiten korkoa ja hylättävä toinen. Tee laskelma ja tee viisas valinta.

Lainan takaisinmaksu tapahtuu kuukausittain ja Equated Monthly Installment (EMI) lasketaan alla olevan kaavan avulla :

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

Rajoitukset:

1 <= P <= 1000000

1 <=T <= 50

1<= N1 <= 30

1<= N2 <= 30

1<= N2 <= 30

Syöttömuoto:

  • Ensimmäinen rivi : P – pääoma (lainasumma)
  • Toinen rivi : T – Kokonaiskesto (vuosina).
  • Kolmas rivi: Ensimmäinen laatta alkaa ensimmäisestä vuodesta ja toinen laatta alkaa ensimmäisen laatan lopusta ja niin edelleen.
  • Seuraava N1-rivi sisältää korkokannan ja sen jakson.
  • N1-rivin jälkeen saamme N2:n eli toisen pankin tarjoamien laatikoiden lukumäärän.
  • Jatkossa N2 riviä on pankin B tarjoamien korkotasojen määrä tietylle ajanjaksolle. Ensimmäinen korkotaso alkaa ensimmäisestä vuodesta ja toinen korkotaso alkaa ensimmäisen korkotason loppupäästä ja niin edelleen.
  • Jakso ja korkotaso rajataan yhdellä valkoisella välilyönnillä.

Tulostusmuoto: Sinun päätöksesi – joko pankki A tai pankki B.

Esittely:

Esimerkkitulo 1:

100002035 9.510 9.65 8.5310 6.95 8.55 7.9

Näytetulo 1:

Bank B

Näytetulo 2:

50000026313 9.53 6.910 5.6314 8.56 7.46 9.6

Näyte Output 2:

Bank A

Ratkaisu:

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

Esimerkki Hackerrank-kysymyksistä: One Egg

”One Egg” on kananmunatoimittaja, joka toimittaa kananmunia vähittäiskauppiaille. Heillä on M-luokan munia. Jokaisessa luokassa voi olla N määrä munia (N voi olla sama tai se voi vaihdella luokittain). Yritys ottaa vastaan X munan tilauksen postitse. Vastauksena he vahvistavat, voivatko he toimittaa kananmunia, lähettämällä ”Kiitos”-viestin ja kananmunien lukumäärän tai lähettämällä ”Valitan”-viestin ja kananmunien lukumäärän, jonka he voivat toimittaa. Ne ilmoittavat myös toimitettavien munien jakautumisen luokittain. Tilatut munat sovitetaan eri luokkiin siten, että ensin sovitetaan suurin määrä munia, sitten loput sovitetaan toiseksi suurimpaan luokkaan ja niin edelleen. Yritys on myös hieman taikauskoinen. Jos tilattujen kananmunien määrä on suurempi tai yhtä suuri kuin varastossa olevien kananmunien kokonaismäärä, se pidättää yhden kananmunan ja lähettää ”Anteeksi”-viestin, jossa ilmoitetaan varastossa olevien kananmunien kokonaismäärä miinus yksi ja kananmunien jakautuminen luokittain.

Huomautus: Jos luokilla on sama määrä munia, ensin syötetty luokka on valittava säädettäväksi.

Syöttömuoto:

Ensimmäinen rivi sisältää kaksi välilyönnillä erotettua kokonaislukua, jotka ilmaisevat M:n (munaluokkien lukumäärä) ja X:n (tilattujen munien lukumäärä) vastaavat arvot Seuraavat M riviä sisältävät kukin kokonaisluvun, joka ilmaisee kussakin luokassa käytettävissä olevien munien lukumäärän

Tulostusmuoto:

Ensimmäisen rivin pitäisi olla: Jos X on pienempi kuin munien kokonaismäärä, tulosta ” Kiitos, X munan tilaus hyväksytään” Muussa tapauksessa, jos X on suurempi tai yhtä suuri kuin munien kokonaismäärä, tulosta ” ” Anteeksi, voimme toimittaa vain (varastossa olevien munien kokonaismäärä -1) munaa” T hen M riviä, joissa on 3 saraketta: Ensimmäinen sarake – Kussakin luokassa käytettävissä olevien munien määrä Toinen sarake – Kullekin luokalle kyseistä tilausta varten varatut munat Kolmas sarake – Saldomunat kussakin luokassa

Edellytykset:

1 ≤ M ≤ 20 N ≥ 1 X ≥ 1

Esimerkin syöttö 1:

5 150 50 15 80 10 5 

Näyte 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 

Selitys:

Kokonaisjärjestys 150 munaa on pienempi kuin munien kokonaismäärä 50+15+80+10+5 = 160. Tästä johtuu kiitosviesti. 150 sovitettiin ensin luokkaa vastaan, jossa oli ensimmäisenä eniten munia 80. Saldo 150-80 = 70 oikaistiin toiseksi eniten munia sisältävää luokkaa 50 vastaan. Saldo 70-50 = 20 sovitettiin sitten 15:tä vastaan. Saldo 20-15 = 5 mukautettiin 10:een, jolloin kyseiseen luokkaan jäi 5 munaa.

Esimerkkitulos 2:

4 250 80 50 70 20 

Sample Output 2:

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

Erittely:

Kokonaismäärä 250 munaa oli suurempi kuin munien kokonaismäärä 80+50+70+20 = 220. Tästä johtuen pahoittelevaa viestiä. 250 sovitettiin ensin luokkaa vastaan, jossa oli ensimmäisenä eniten munia 80. Saldo 250-80 = 170 oikaistiin toiseksi eniten munia sisältävää luokkaa 70 vastaan. Saldo 170-70 = 100 sovitettiin sitten 50:tä vastaan. Saldo 100-50 = 50 sovitettiin sitten 20:een. Koska saldo on suurempi kuin viimeisen luokan muna, viimeiseen luokkaan jää yhtä lukuun ottamatta kaikki munat.

Ratkaisu:

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

Kysymys 3:

Esimerkkikysymyksiä Hackerrankista: Milk Man and His Bottles

Maitomies tarjoilee maitoa erikokoisissa pakatuissa pulloissa. Pullojen mahdolliset koot ovat {1, 5, 7 ja 10} litraa. Hän haluaa toimittaa halutun määrän käyttämällä mahdollisimman vähän pulloja koosta riippumatta. Tavoitteenasi on auttaa häntä löytämään pienin tarvittava pullomäärä, joka riittää toimittamaan annetun maidon kysynnän.

Syötteen muoto:

  • Ensimmäinen rivi sisältää testitapausten lukumäärän N
  • Jäljempänä N riviä, joista kukin pitää sisällään positiivisen kokonaisluvun Li, joka vastaa maidon kysyntää.

Tulostusmuoto:

Tulosta kullekin syötetylle Li:lle kysynnän täyttämiseen tarvittava minimimäärä pulloja

Ehdot:

Testitapausten määrä on 2

Testitapausten määrä on 2

Testitapausten määrä on 2

Testitapausten määrä on 2

Testitapausten määrä on 2

Testitapausten määrä on 2

Testitapausten määrä on 5

Testitapausten määrä on 5

Testitapausten määrä on 5

:

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

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

Ratkaisu:

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

Kysymys 4:

Esimerkkikysymyksiä Hackerrankista: Bride Hunting

Sam on kelvollinen poikamies. Hän päättää asettua aloilleen ja perustaa perheen. Hän lähtee morsiamenmetsästykseen. Hän haluaa naida tytön, jolla on vähintään yksi alla mainituista kahdeksasta ominaisuudesta:-

1) Tytön tulisi olla rikas.

2) Tytön tulisi olla insinööri/lääkäri.

3) Tytön tulisi olla kaunis.

4) Tytön tulisi olla pituudeltaan 5.3″.

5) Tytön tulisi työskennellä MNC:ssä.

6) Tytön tulisi olla ekstrovertti.

7) Tytöllä ei saisi olla silmälaseja.

8) Tytön tulisi olla kiltti ja rehellinen.

Hän etsii morsianta, joka omaa jotakin tai jotakin tai jotakin kaikista edellä mainituista 8 ominaisuudesta. Morsiamenmetsästyksessä hän saattaa löytää useamman kuin yhden ehdokkaan vaimokseen.

Tällöin hän haluaa valita tytön, jonka talo on lähimpänä hänen taloaan. Etsi Samille morsian, jolla on mahdollisimman paljon ominaisuuksia. Jos siinä tapauksessa on useampi kuin yksi hakija, jotka ovat yhtä kaukana Samin talosta; silloin

print ””Moniavioisuus ei sallittu””.

Jos ei ole yhtään sopivaa tyttöä, joka täyttäisi kriteerit, niin tulosta ””Sopivaa tyttöä ei löytynyt””

Annetun matriisin N*M mukaan Samin talo on kohdassa (1, 1). Sitä merkitään numerolla 1. Samassa matriisissa naimisiinmenokelpoisen Tytön sijaintia merkitään myös numerolla 1. Näin ollen sijainnissa (1, 1) olevaa numeroa 1 ei pidä pitää naimisiinmenokelpoisen Tytön sijaintina.

Tämän Tytön ominaisuudet Samin kriteereiden mukaan on purettava hänen nollasta poikkeavien naapureidensa määrästä (maksimissaan 8:nneksi). Yllä olevan ehdon tapaan sijainnissa (1, 1) olevaa 1:tä ei tule pitää tytön ominaisuutena. Katso esimerkkiosio paremman ymmärryksen saamiseksi.

Etsitään Sam, sopiva Morsian ja tulostetaan morsiamen rivi ja sarake ja selvitetään, kuinka monta ominaisuutta Morsiamella on.

Huomautus: Etäisyys lasketaan hyppyjen lukumääränä mihin tahansa suuntaan, ts. (Vasemmalle, oikealle, ylös, alas ja diagonaalisesti)

Ehdot:

2 <= N,M <= 10^2

Syöttöformaatti:

  • Ensimmäinen rivi sisältää talojen rivin (N) ja sarakkeen (M).
  • Seuraavat N riviä sisältävät tiedot tytöistä ja heidän ominaisuuksistaan.

Tulostusmuoto:

Sisältää morsiamen rivin ja sarakkeen sekä niiden ominaisuuksien lukumäärän, jotka morsiamella on, kaksoispisteellä erotettuna (ts. :).

Esimerkki Input 1:

2 9

1 0 1 1 0 1 1 1 1

0 0 0 1 1 0 1 0 0 0 1

Esimerkki Output 1:

Erittely:

Tyttö ja laadut ovat kohdissa (1,3),(1,4),(1,6),(1,6),(1,6),(1,6),(1,6),(1,6),(1,6),(1,6),(1,6),(1,6),(1,6),(1,6),(1,6).

Kohdassa (1,3) olevalla tytöllä on 2 ominaisuutta (eli (1,4)ja (2,4)).

Kohdassa (1,4) olevalla tytöllä on 2 ominaisuutta.

Kohdassa (1,6) olevalla morsiamella on 2 ominaisuutta.

Morsiamella, joka on paikalla (1,7), on 3 ominaisuutta.

Morsiamella, joka on paikalla (1,8), on 3 ominaisuutta.

Morsiamella, joka on paikalla (1,9), on 2 ominaisuutta.

Morsiamella, joka on paikalla (2,4), on 2 ominaisuutta.

Morsiamella, joka on paikalla (2,6), on 2 ominaisuutta.

Morsiamella, joka on osoitteessa (2,9), on 2 ominaisuutta.

Kuten näemme, on kaksi kilpailijaa, joilla on maksimaaliset ominaisuudet, toinen on osoitteessa (1,7) ja toinen osoitteessa (1,8).

Tyttö, joka on lähimpänä Samin taloa, on osoitteessa (1,7). Hän on siis morsian.

Tulos on siis 1:7:3.

Sample Input 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 0 0 0

Sample Output 2:

Erittely:

Morsian ja ominaisuudet ovat paikalla (3,3),(3,4),(3,5),(4,3),(4,4),(4,5),(5,3),(5,4),(5,4),(5,5)

Morsiamella, joka on paikalla (3,3), on 3 ominaisuutta (i.eli (3,4),(4,3) ja (4,4)).

Kohdassa (3,4) olevalla morsiamella on 5 ominaisuutta.

Kohdassa (3,5) olevalla morsiamella on 3 ominaisuutta.

Kohdassa (4,3) olevalla morsiamella on 5 ominaisuutta.

Kohdassa (4,4) olevalla morsiamella on 8 ominaisuutta.

Kohdassa (4,5) olevalla morsiamella on 5 ominaisuutta.

Kohdassa (5,3) olevalla morsiamella on 3 ominaisuutta.

Kohdassa (5,4) olevalla morsiamella on 5 ominaisuutta.

Kohdassa (5,5) olevalla morsiamella on 3 ominaisuutta.

Kuten näemme, kohdassa (4,4) olevalla morsiamella on maksimimäärä ominaisuuksia. Näin ollen hän on morsian.

Tulos on siis 4:4:8.

Ratkaisu:

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

Voit myös tarkistaa nämä:

  • Pakkoharjoitus Tietorakenteet & Algoritmit kysymykset
  • Pakkoharjoitus C-ohjelmointi kysymykset
Jos sinulla on palautetta tästä artikkelista ja haluat parantaa tätä, kirjoita osoitteeseen [email protected]

.

Vastaa

Sähköpostiosoitettasi ei julkaista.