Március 12, 2020

Ez a cikk a Hackerrank néhány fontos kérdését és kihívását tárgyalja a különböző termékcégek felvételein. Ha valaki érdeklődik a programozás iránt, akkor ezt a fontos Hackerrank kérdések listáját mindenképpen meg kell oldania.

Hackerrank kérdések megoldásokkal

Itt van néhány leggyakrabban feltett Hackerrank kérdés megoldásokkal.

  • A szigetek száma a DFS segítségével
  • A részhalmazösszeg-probléma
  • Diéta az útvesztőben probléma
  • Az n-edik lépcsőhöz vezető utak száma
  • Sudoku probléma
  • Mátrixot K-szor elforgatni
  • 0-szer
  • -1 Knapsack-probléma
  • Hurok felderítése egy összekapcsolt listában
  • Redundáns zárójelek
  • Kiegyenlített zárójelek ellenőrzése
  • Két rendezett tömb középértéke

Kérdés 1:

Mintakérdések Hackerrank: Bankok összehasonlítása

Létezik két bank; Bank A és Bank B. A kamatlábuk eltérő. Ön mindkét banktól kapott ajánlatot az éves kamatláb, a futamidő és a kamatláb változásai tekintetében a teljes futamidő alatt.

Azt az ajánlatot kell választania, amelyik a legkevesebb kamatba kerül Önnek, és a másikat el kell utasítania. Végezze el a számítást, és válasszon bölcsen.

A hiteltörlesztés havi gyakorisággal történik, és az egyenletes havi részletet (EMI) az alábbi képlet segítségével számítják ki :

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

Korlátozások:

1 <= P <= 1000000

1 <=T <= 50

1<= N1 <= 30

1<= N2 <= 30

Bemeneti formátum:

  • Első sor : P – tőke (hitelösszeg)
  • Második sor : T – Teljes futamidő (években).
  • Harmadik sor: Az első tábla az első évtől kezdődik, a második tábla az első tábla végétől kezdődik, és így tovább.
  • A következő N1 sor tartalmazza a kamatlábat és azok időszakát.
  • Az N1 sor után megkapjuk az N2 sort, azaz a második bank által kínált tábla számát.
  • A következő N2 sorok a B bank által egy adott időszakra kínált kamatlábak számát tartalmazzák. Az első kamatláb az első évtől kezdődik, a második kamatláb az első kamatláb végétől kezdődik, és így tovább.
  • Az időszakot és a kamatlábat egyetlen szóköz fogja elválasztani.

Kimeneti formátum: Bank A vagy Bank B.

Magyarázat:

Minta Input 1:

100002035 9.510 9.65 8.5310 6.95 8.55 7.9

Mintakimenet 1:

Bank B

Mintakimenet 2:

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

Példa Hackerrank kérdések: Egy tojás

A “One Egg” egy tojásellátó cég, amely tojásokat szállít a kiskereskedőknek. M osztályú tojásaik vannak. Minden osztályhoz N számú tojás tartozhat (az N lehet azonos vagy változhat osztályonként). Postai úton X tojás megrendelését fogadják el. Válaszként egy “Köszönöm” üzenettel és a tojások számával, vagy egy “Sajnálom” üzenettel és az általuk szállítható tojások számával megerősítik, hogy tudják-e szállítani a tojásokat. Megemlítik a tojások osztályonkénti megoszlását is. A megrendelt tojásokat a különböző osztályokhoz igazítják, először a legtöbb tojást, majd az egyenleget a második legmagasabb osztályhoz igazítják, és így tovább. A cég egy kicsit babonás is. Ha a megrendelt tojások száma nagyobb vagy egyenlő, mint a készleten lévő tojások száma, akkor egy tojást visszatartanak, és a “Sajnálom” üzenettel válaszolnak, amelyen szerepel a készleten lévő tojások száma mínusz egy, valamint a tojások osztályonkénti bontása.

Megjegyzés: Ha az osztályok azonos számú tojással rendelkeznek, akkor az először megadott osztályt kell kiválasztani a beállításhoz.

Bemeneti formátum:

Az első sor két szóközzel elválasztott egész számot tartalmaz, amelyek az M (a tojások osztályainak száma) és X, a rendezett tojások száma megfelelő értékeit jelölik A következő M sorok egy-egy egész számot tartalmaznak, amelyek az egyes osztályokban rendelkezésre álló tojások számát jelzik

Kimeneti formátum:

Az első sor a következő legyen: Ha X kisebb, mint a tojások teljes száma, akkor nyomtassa ki: ” Köszönjük, X tojás megrendelését elfogadjuk” Máskülönben, ha X nagyobb vagy egyenlő, mint a tojások teljes száma, akkor nyomtassa ki: ” ” Sajnáljuk, csak (a készleten lévő tojások teljes száma -1) tojást tudunk szállítani” T tyúk M sor 3 oszlopban: Első oszlop – Az egyes osztályokban rendelkezésre álló tojások száma Második oszlop – Az adott megrendeléshez az egyes osztályokhoz rendelt tojások Harmadik oszlop – Az egyes osztályokhoz rendelt tojások egyenlege

Kényszerek:

1 ≤ M ≤ 20 N ≥ 1 X ≥ 1

Minta Input 1:

5 150 50 15 80 10 5 

Mintakimenet 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 

Magyarázat:

A 150 tojás összes rendelése kevesebb, mint a tojások teljes száma 50+15+80+10+5 = 160. Ezért a köszönő üzenet. A 150-et először az első legmagasabb tojásszámú 80 tojást tartalmazó osztállyal szemben állítottuk be. A 150-80 = 70 egyenlegét a második legtöbb tojást tartalmazó 50-es osztályhoz igazítottuk. A 70-50 = 20 egyenlegét ezután a 15-tel szemben állították be. A 20-15 = 5 egyenlegét 10 ellenében igazították ki, így az osztályban 5 tojás maradt.

Minta Input 2:

4 250 80 50 70 20 

Minta Output 2:

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

Magyarázat:

A 250 tojás összrendelése nagyobb volt, mint az összes tojás száma 80+50+70+20 = 220. Ezért a sajnálkozó üzenet. A 250-et először az első legmagasabb tojásszámú 80 tojást tartalmazó osztállyal szemben állítottuk be. A 250-80 = 170 egyenlegét a második legmagasabb 70 tojást tartalmazó osztályhoz igazítottuk. A 170-70 = 100 egyenleget ezután az 50 ellenében állítottuk be. A 100-50 = 50 egyenlegét aztán a 20-hoz igazították. Mivel az egyenleg nagyobb, mint az utolsó tojásosztály, egy kivételével minden tojás az utolsó osztályban maradt.

megoldás:

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

Kérdés 3:

Minta Hackerrank kérdések:

A tejes ember és a palackjai

A tejes ember különböző méretű, csomagolt palackokban kínálja a tejet. A palackok lehetséges mérete {1, 5, 7 és 10} liter. A kívánt mennyiséget a mérettől függetlenül a lehető legkevesebb palackból akarja kiszállítani. Az Ön célja, hogy segítsen neki megtalálni azt a minimális palackszámot, amely a megadott tejigény kielégítéséhez szükséges.

Bemenetformátum:

  • Az első sor tartalmazza az N
  • N következő N sorban egy-egy pozitív egész számot Li, amely megfelel a tejigénynek.

Kimeneti formátum:

Minden egyes Li bemenethez írja ki a kereslet kielégítéséhez szükséges minimális palackszámot

Kényszerek:

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

Mintabemenet és kimenet:

2 7

Magyarázat:

A tesztesetek száma 2

17 esetén = 10*1 + 7*1 = 2

65 esetén = 10*6 + 5*1 = 7

Még néhány példa:

A 99-re = 10*9 + 7*1 + 1*2 = 12

63-ra = 10*6 + 1*3 =9

Megoldás: 99-re = 10*9 + 7*1 + 1*2 = 12

megoldás:

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

Kérdés 4:

Mintakérdés Hackerrank:

Sam egy alkalmas agglegény. Úgy dönt, hogy letelepedik az életben és családot alapít. Elindul menyasszonyra vadászni. Olyan lányt szeretne feleségül venni, aki az alábbi 8 tulajdonság közül legalább eggyel rendelkezik:-

1) A lány legyen gazdag.

2) A lány legyen mérnök/orvos.

3) A lány legyen szép.

4) A lány legyen 5.3″ magas.

5) A lánynak egy MNC-ben kellene dolgoznia.

6) A lánynak extrovertáltnak kellene lennie.

7) A lánynak nem kellene szemüvegesnek lennie.

8) A lánynak kedvesnek és becsületesnek kellene lennie.

Olyan menyasszonyt keres, aki a fent említett 8 tulajdonság közül valamennyivel vagy mindegyikkel rendelkezik. A menyasszonykeresés során előfordulhat, hogy több jelentkezőt is talál a feleségének.

Ebben az esetben olyan lányt akar választani, akinek a háza a legközelebb van a házához. Keressen olyan menyasszonyt Sam számára, aki maximális tulajdonságokkal rendelkezik. Ha abban az esetben egynél több olyan pályázó van, akik azonos távolságra vannak Sam”s házától; akkor

print “”Poligamy not allowed””.

Ha nincs megfelelő lány, aki megfelel a kritériumoknak, akkor print “”Nem találtunk megfelelő lányt””

Adott egy N*M mátrix, Sam háza az (1, 1) helyen van. Ezt jelöli az 1. Ugyanebben a mátrixban egy házasítható Lány helyét szintén az 1 jelöli. Ezért az (1, 1) helyen lévő 1 nem tekinthető egy házasítható Lány helyének.

A lány tulajdonságait Sam’ kritériumai szerint abból kell dekódolni, hogy hány nem nulla szomszédja van (max. 8-as). A fenti feltételhez hasonlóan a (1, 1) helyen lévő 1 nem tekinthető a Lány tulajdonságának. A jobb megértéshez lásd a Példa részt.

Keresd meg Samet, egy megfelelő Menyasszony, és írd ki a menyasszony sorát és oszlopát, és derítsd ki, hogy hány tulajdonsággal rendelkezik a menyasszony.

MEGJEGYZÉS: A távolságot az ugrások számában számítjuk bármely irányban, azaz. (Balra, Jobbra, Fel, Le és Átlósan)

Kényszerek:

2 <= N,M <= 10^2

Bemeneti formátum:

  • Az első sor tartalmazza a házak sorát (N) és oszlopát (M).
  • A következő N sor tartalmazza a lányok adatait és tulajdonságait.

Kimeneti formátum:

Ez tartalmazza a menyasszony sorát és oszlopát, valamint a menyasszony által birtokolt tulajdonságok számát kettősponttal (azaz 🙂 elválasztva.

Példa Input 1:

2 9

1 0 1 1 0 1 1 1 1 1

0 0 0 1 1 0 1 0 0 0 1

Példa Output 1:

Magyarázat:

A lány és a tulajdonságok az (1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,4),(2,6),(2,9) pontban vannak jelen.

Az (1,3)-nál lévő lánynak 2 tulajdonsága van (azaz (1,4)és (2,4)).

Az (1,4)-nél lévő lánynak 2 tulajdonsága van.

Az (1,6)-nál lévő menyasszony 2 tulajdonsága van.

Az (1,7)-nél lévő menyasszonynak 3 tulajdonsága van.

Az (1,8)-nál lévő menyasszonynak 3 tulajdonsága van.

Az (1,9)-nél lévő menyasszonynak 2 tulajdonsága van.

A (2,4)-nél lévő menyasszonynak 2 tulajdonsága van.

A (2,6)-nál lévő menyasszonynak 2 tulajdonsága van.

A (2,9)-nél lévő Menyasszony 2 tulajdonsággal rendelkezik.

Mint látjuk, két olyan versenyző van, akinek maximális tulajdonságai vannak, az egyik az (1,7)-nél, a másik az (1,8)-nál.

A Sam házához legközelebb lévő lány az (1,7)-nél van. Ezért ő a menyasszony.

Az eredmény tehát 1:7:3 lesz.

Mintabemenet 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 1 0

0 0 0 0 0 0 0 0

Mintakimenet 2:

Magyarázat:

A menyasszony és tulajdonságai jelen vannak a (3,3),(3,4),(3,5),(4,3),(4,4),(4,5),(5,3),(5,4),(5,5)

A menyasszony jelen van a (3,3) pontban, és 3 tulajdonsága van (i.azaz (3,4),(4,3) és (4,4)).

A (3,4)-nél lévő Menyasszony 5 tulajdonsággal rendelkezik.

A (3,5)-nél lévő Menyasszony 3 tulajdonsággal rendelkezik.

A (4,3)-nál lévő Menyasszony 5 tulajdonsággal rendelkezik.

A (4,4)-nél lévő Menyasszony 8 tulajdonsággal rendelkezik.

A (4,5)-nél lévő Menyasszony 5 tulajdonsággal rendelkezik.

Az (5,3)-nál lévő Menyasszony 3 tulajdonsággal rendelkezik.

Az (5,4)-nél lévő Menyasszony 5 tulajdonsággal rendelkezik.

Az (5,5)-nél lévő Menyasszony 3 tulajdonsággal rendelkezik.

Mint látjuk, a (4,4)-nél lévő lánynak van a legtöbb tulajdonsága. Ezért ő a menyasszony.

Az eredmény tehát 4:4:8 lesz.

megoldás:

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

Ezeket is ellenőrizheti:

  • Must Practice Data Structures & Algorithms kérdések
  • Must Practice C programming kérdések
Ha bármilyen visszajelzésed van ezzel a cikkel kapcsolatban és szeretnéd javítani, írj a [email protected]

címre.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.