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
címre.