Publikováno 12. března 2020

V tomto článku budeme diskutovat o některých důležitých otázkách a výzvách Hackerrank kladených při náboru do různých produktových společností. Pokud jste někdo, kdo se zajímá o programování, pak tento seznam důležitých otázek Hackerrank musíte vyřešit.

Otázky Hackerrank s řešeními

Představujeme vám některé nejčastěji kladené otázky Hackerrank s řešeními.

  • Počet ostrovů pomocí DFS
  • Úloha o součtu podmnožin
  • Úloha o kryse v bludišti
  • Počet cest k n-tému schodišti
  • Úloha o sudoku
  • Otočení matice o K krát
  • 0-.1 Knapsack problém
  • Odhalení smyčky ve spojovém seznamu
  • Redundantní závorky
  • Kontrola vyvážených závorek
  • Medián dvou setříděných polí

Zadání 1:

Vzorové otázky Hackerrank:

Existují dvě banky: banka A a banka B. Jejich úrokové sazby se liší. Od obou bank jste obdrželi nabídky z hlediska roční úrokové sazby, doby splatnosti a změn úrokové sazby po celou dobu splatnosti.

Musíte si vybrat nabídku, která vás stojí nejméně úroků, a druhou odmítnout. Proveďte výpočet a moudře se rozhodněte.

Splácení úvěru probíhá s měsíční frekvencí a rovná měsíční splátka (EMI) se vypočítá podle níže uvedeného vzorce :

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

Omezení:

1 <= P <= 1000000

1 <=T <= 50

1<= N1 <= 30

1<= N2 <= 30

Vstupní formát:

  • První řádek : P – jistina (výše půjčky)
  • Druhý řádek : T – celková doba trvání (v letech).
  • Třetí řádek: N1 je počet desek úrokových sazeb pro dané období od banky A. První deska začíná od prvního roku a druhá deska začíná od konce první desky atd.
  • Další řádek N1 bude obsahovat úrokové sazby a jejich období.
  • Po řádcích N1 dostaneme N2 tj. počet desek nabízených druhou bankou.
  • Další řádky N2 jsou počty slabů úrokových sazeb pro dané období od banky B. První slab začíná od prvního roku a druhý slab začíná od konce prvního slab atd.
  • Období a sazba budou ohraničeny jednou bílou mezerou.

Výstupní formát: Vaše rozhodnutí – buď banka A, nebo banka B.

Vysvětlení:

Vzorový vstupní údaj 1:

100002035 9.510 9.65 8.5310 6.95 8.55 7.9

Vzorkový výstup 1:

Bank B

Vzorkový vstup 2:

50000026313 9.53 6.910 5.6314 8.56 7.46 9.6

Vzorkový výstup 2:

Bank A

Řešení:

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

Vzorové otázky Hackerrank: One Egg

„One Egg“ je společnost dodávající vejce maloobchodníkům. Má k dispozici M tříd vajec. V každé třídě může být N vajec (N může být stejné nebo se může lišit třídu od třídy). Přijímají objednávky poštou na X vajec. V odpovědi potvrdí, zda mohou vejce dodat, s poznámkou „Děkujeme“ a počtem vajec, nebo s poznámkou „Omlouváme se“ a počtem vajec, která mohou dodat. Uvedou také rozdělení vajec podle tříd, které budou dodávat. Objednaná vejce se upraví podle jednotlivých tříd, přičemž nejprve se upraví největší počet vajec, poté se upraví zůstatek podle druhé nejvyšší třídy atd. Společnost je také trochu pověrčivá. Pokud je počet objednaných vajec větší nebo roven celkovému počtu vajec na skladě, pak si jedno vejce ponechá a zpětně odpoví poznámkou „Omlouváme se“ s celkovým počtem vajec na skladě minus jedno a rozdělením vajec podle tříd.

Poznámka: Pokud mají třídy stejný počet vajec, pak by se pro úpravu měla vybrat třída zadaná jako první.

Vstupní formát:

První řádek obsahuje dvě celá čísla oddělená mezerou označující příslušné hodnoty M (počet tříd vajec) a X, počet objednaných vajec Následující M řádků obsahuje vždy jedno celé číslo udávající počet vajec dostupných v každé třídě

Výstupní formát:

První řádek by měl být, pokud je X menší než celkový počet vajec, pak vypište “ Děkujeme, vaše objednávka na X vajec je přijata“ Jinak pokud je X větší nebo rovno celkovému počtu vajec, pak vypište “ “ Je nám líto, můžeme dodat pouze (celkový počet vajec na skladě -1) vajec“ T hen M řádků se 3 sloupci: První sloupec – Počet dostupných vajec v každé třídě Druhý sloupec – Vejce přidělená proti každé třídě pro danou objednávku Třetí sloupec – Zůstatek vajec proti každé třídě

Omezení:

1 ≤ M ≤ 20 N ≥ 1 X ≥ 1

Vzorové zadání 1:

5 150 50 15 80 10 5 

Vzorkový výstup 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 

Vysvětlení:

Celkové pořadí 150 vajec je menší než celkový počet vajec 50+15+80+10+5 = 160. Proto se zobrazuje děkovná zpráva. Nejprve bylo 150 upraveno proti třídě s prvním nejvyšším počtem vajec 80. Zůstatek 150-80 = 70 byl upraven proti druhé třídě s nejvyšším počtem 50. Zůstatek 70-50 = 20 pak byl upraven proti 15. Zůstatek 20-15 = 5 pak byl upraven proti 10, takže v této třídě zůstalo 5 vajec.

Výstupní vzorek 2:

4 250 80 50 70 20 

Výstupní vzorek 2:

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

Vysvětlení:

Celková objednávka 250 vajec byla větší než celkový počet vajec 80+50+70+20=220. Proto ta omluvná zpráva. Nejprve bylo 250 upraveno proti třídě s prvním nejvyšším počtem vajec 80. Zůstatek 250-80 = 170 byl upraven proti třídě s druhým nejvyšším počtem 70. Zůstatek 170-70 = 100 byl poté upraven proti 50. Zůstatek 100-50 = 50 pak byl upraven proti 20. Protože zůstatek je větší než poslední třída vajec, všechna vejce kromě jednoho zůstala v této poslední třídě.

Řešení:

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

Otázka 3:

Vzorové otázky Hackerrank: Mlékař a jeho lahve

Mlékař podává mléko v balených lahvích různých velikostí. Možné velikosti lahví jsou {1, 5, 7 a 10} litrů. Chce dodat požadované množství s použitím co nejmenšího počtu lahví bez ohledu na jejich velikost. Vaším úkolem je pomoci mu najít minimální počet lahví potřebných k dodání dané poptávky po mléku.

Vstupní formát:

  • První řádek obsahuje počet testovacích případů N
  • Následujících N řádků, každý obsahuje kladné celé číslo Li, které odpovídá poptávce po mléku.

Výstupní formát:

Pro každý vstup Li vypište minimální počet lahví potřebný k uspokojení poptávky

Omezení:

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

Vzorový vstup a výstup:

2 7

Vysvětlení:

Počet testovacích případů je 2

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

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

Několik dalších příkladů:

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

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

Řešení:

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

Otázka 4:

Vzorové otázky Hackerrank:

Sam je vhodný starý mládenec. Rozhodne se usadit v životě a založit rodinu. Vydá se proto na lov nevěsty. Chce si vzít dívku, která má alespoň jednu z 8 níže uvedených vlastností:-

1) Dívka by měla být bohatá.

2) Dívka by měla být inženýrka/lékařka.

3) Dívka by měla být krásná.

4) Dívka by měla být vysoká 5,3″.

5) Dívka by měla pracovat v MNC.

6) Dívka by měla být extrovert.

7) Dívka by neměla mít brýle.

8) Dívka by měla být milá a čestná.

Hledá nevěstu, která má některé nebo všech 8 výše uvedených vlastností. Při hledání nevěsty může najít více uchazeček o manželství.

V takovém případě si chce vybrat dívku, jejíž dům je nejblíže jeho domu. Najděte pro Sama nevěstu, která má maximum kvalit. V případě, že je více uchazeček, které jsou ve stejné vzdálenosti od Samova domu; pak

napiš „“Polygamie není povolena““.

V případě, že neexistuje žádná vhodná dívka, která by splňovala kritéria, pak vytiskněte „“Nebyla nalezena žádná vhodná dívka““

Při matici N*M je Samův dům na (1, 1). Je označen číslem 1. V téže matici je umístění dívky vhodné ke sňatku rovněž označeno číslem 1. Proto by 1 v místě (1, 1) nemělo být považováno za umístění dívky vhodné ke sňatku.

Vlastnosti této dívky podle Samových kritérií je třeba dekódovat z počtu nenulových sousedů (max. 8), které má. Podobně jako u výše uvedené podmínky by se 1 na místě (1, 1) neměla považovat za vlastnost dívky. Pro lepší pochopení viz část Příklad.

Najděte Sama, vhodnou Nevěstu a vypište řádek a sloupec Nevěsty a zjistěte počet kvalit, které Nevěsta má.

POZNÁMKA: Vzdálenost se počítá v počtu skoků v libovolném směru, tj. ve směru od sebe. (vlevo, vpravo, nahoru, dolů a po úhlopříčce)

Omezení:

2 <= N,M <= 10^2

Vstupní formát:

  • První řádek obsahuje řádek (N) a sloupec (M) domů.
  • Další N řádků obsahuje údaje o dívkách a jejich vlastnostech.

Výstupní formát:

Obsahuje řádek a sloupec nevěsty a počet vlastností, které nevěsta má, oddělené dvojtečkou (tj. :).

Příklad vstupu 1:

2 9

1 0 1 1 0 1 1 1 1 1

0 0 0 1 0 1 0 1 0 1

Příklad výstupu 1:

Vysvětlení:

Dívka a vlastnosti jsou přítomny na (1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,4),(2,6),(2,9).

Dívka přítomná na (1,3) má 2 vlastnosti (tj. (1,4)a (2,4)).

Dívka přítomná na (1,4) má 2 vlastnosti.

Nevěsta přítomná na (1,6) má 2 vlastnosti.

Nevěsta přítomná na (1,7) má 3 vlastnosti.

Nevěsta přítomná na (1,8) má 3 vlastnosti.

Nevěsta přítomná na (1,9) má 2 vlastnosti.

Nevěsta přítomná na (2,4) má 2 vlastnosti.

Nevěsta přítomná na (2,6) má 2 vlastnosti.

Nevěsta přítomná na (2,9) má 2 vlastnosti.

Jak vidíme, jsou dva uchazeči, kteří mají maximum vlastností, jeden je na (1,7) a druhý na (1,8).

Dívka, která je nejblíže Samovu domu, je na (1,7). Je to tedy nevěsta.

Výsledek tedy bude 1:7:3. Nevěsta je tedy nevěsta.

Vzorový vstup 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

Vzorkový výstup 2:

Vysvětlení:

Nevěsta přítomná v bodě (3,3),(3,4),(3,5),(4,3),(4,4),(4,5),(5,3),(5,4),(5,5)

Nevěsta přítomná v bodě (3,3) má 3 vlastnosti (tj.(3,4),(4,3) a (4,4)).

Nevěsta přítomná v (3,4) má 5 vlastností.

Nevěsta přítomná v (3,5) má 3 vlastnosti.

Nevěsta přítomná v (4,3) má 5 vlastností.

Nevěsta přítomná v (4,4) má 8 vlastností.

Nevěsta přítomná v (4,5) má 5 vlastností.

Nevěsta přítomná v (5,3) má 3 vlastnosti.

Nevěsta přítomná v (5,4) má 5 vlastností.

Nevěsta přítomná v (5,5) má 3 vlastnosti.

Jak vidíme, dívka přítomná v (4,4) má maximální počet vlastností. Je tedy nevěstou.

Výsledek tedy bude 4:4:8. V případě, že je nevěsta nevěstou, může být i nevěsta nevěstou.

Řešení:

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

Můžete si je také ověřit:

  • Musí procvičovat datové struktury & Otázky k algoritmům
  • Musí procvičovat programování v jazyce C
Pokud máte k tomuto článku nějakou zpětnou vazbu a chcete ho vylepšit, napište prosím na [email protected]

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.