Published on 12 Mar 2020

W tym artykule będziemy omawiać niektóre z ważnych pytań Hackerrank i wyzwania zadawane w różnych rekrutacjach firm produktowych. Jeśli jesteś osobą zainteresowaną programowaniem, to ta lista ważnych pytań Hackerrank jest obowiązkowa do rozwiązania.

Pytania Hackerrank z rozwiązaniami

Oto kilka najczęściej zadawanych pytań Hackerrank z rozwiązaniami.

  • Liczba wysp przy użyciu DFS
  • Problem sumy podzbiorów
  • Rat in a labe problem
  • Liczba sposobów dotarcia do n-tych schodów
  • Problem sudoku
  • Obrót macierzy o K razy
  • 0-.1 Knapsack problem
  • Wykrywanie pętli na liście połączonej
  • Zbędne nawiasy
  • Sprawdzanie nawiasów zrównoważonych
  • Mediana dwóch posortowanych tablic

Pytanie 1:

Przykładowe pytania Hackerrank: Bank Compare

Istnieją dwa banki; Bank A i Bank B. Ich oprocentowanie jest różne. Otrzymałeś oferty od obu banków pod względem rocznej stopy procentowej, okresu spłaty i zmian stopy procentowej w całym okresie spłaty.

Musisz wybrać ofertę, która kosztuje Cię najmniej odsetek i odrzucić drugą. Dokonaj obliczeń i dokonaj mądrego wyboru.

Spłata kredytu odbywa się z częstotliwością miesięczną, a miesięczną ratę kredytu (EMI) oblicza się według wzoru podanego poniżej:

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

Wymagania:

1 <= P <= 1000000

1 <=T <= 50

.

1<= N1 <= 30

1<= N2 <= 30

Format wejściowy:

  • Pierwszy wiersz : P – principal (Loan Amount)
  • Drugi wiersz : T – Total Tenure (in years).
  • Trzecia linia: N1 to liczba płyt oprocentowania dla danego okresu przez Bank A. Pierwsza płyta zaczyna się od pierwszego roku, a druga od końca pierwszej płyty i tak dalej.
  • Następna linia N1 będzie zawierać oprocentowanie i ich okres.
  • Po N1 liniach otrzymamy N2 viz. liczbę płyt oferowanych przez drugi bank.
  • Następne N2 wiersze to liczba płyt oprocentowania dla danego okresu w banku B. Pierwsza płyta zaczyna się od pierwszego roku, a druga od końca pierwszej płyty i tak dalej.
  • Okres i stopa będą ograniczone pojedynczą białą spacją.

Format wyjściowy: Twoja decyzja – albo bank A, albo bank B.

Wyjaśnienie:

Przykładowe wejście 1:

100002035 9.510 9.65 8.5310 6.95 8.55 7.9

Sample Ouput 1:

Bank B

Sample Input 2:

50000026313 9.53 6.910 5.6314 8.56 7.46 9.6

Próbka Wyjście 2:

Bank A

Rozwiązanie:

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

Przykładowe pytania Hackerrank: One Egg

„One Egg” jest firmą dostarczającą jaja do sprzedawców detalicznych. Firma posiada M klas jaj. Każda klasa może mieć N liczbę jaj (N może być takie samo lub może się różnić w zależności od klasy). Firma przyjmuje pocztą zamówienie na X jaj. W odpowiedzi potwierdzają, czy mogą dostarczyć jaja z adnotacją „Dziękuję” i liczbą jaj lub z adnotacją „Przykro mi” i liczbą jaj, które mogą dostarczyć. Podają również podział jaj na klasy, które będą dostarczać. Zamówione jajka są dopasowywane do różnych klas, przy czym najpierw dopasowywana jest największa liczba jajek, następnie saldo jest dopasowywane do drugiej w kolejności i tak dalej. Firma jest również nieco przesądna. Jeśli liczba zamówionych jaj jest większa lub równa całkowitej liczbie jaj w magazynie, wtedy zatrzymują jedno jajo i odpowiadają z powrotem notatką „Przepraszamy” z całkowitą liczbą jaj w magazynie minus jedno i podziałem jaj na klasy.

Uwaga: Jeśli klasy mają taką samą liczbę jaj, to klasa wprowadzona jako pierwsza powinna być wybrana do korekty.

Format wejściowy:

Pierwszy wiersz zawiera dwie oddzielone spacjami liczby całkowite oznaczające odpowiednie wartości M (liczba klas jaj) i X, liczba jaj uporządkowanych W kolejnych M wierszach znajduje się po jednej liczbie całkowitej oznaczającej liczbę jaj dostępnych w każdej klasie

Format wyjściowy:

Pierwszy wiersz powinien być, jeśli X jest mniejsze niż całkowita liczba Jaj to Print ” Thank you, your order for X eggs is accepted” Else jeśli X jest większe lub równe całkowitej liczbie Jaj to print ” ” ” Sorry, we can only supply (total number of Eggs in stock -1) eggs” T hen M lines with 3 columns: Pierwsza kolumna – Liczba jaj dostępnych w każdej klasie Druga kolumna – Jaja przydzielone względem każdej klasy dla tego zamówienia Trzecia kolumna – Bilans jaj względem każdej klasy

Wymagania:

1 ≤ M ≤ 20 N ≥ 1 X ≥ 1

Przykładowe dane wejściowe 1:

5 150 50 15 80 10 5 

Przykładowe wyjście 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 

Objaśnienie:

Całkowite zamówienie 150 jajek jest mniejsze niż całkowita liczba jajek 50+15+80+10+5 = 160. Stąd wiadomość Thank you. 150 zostało najpierw skorygowane w stosunku do klasy z pierwszą najwyższą liczbą jaj 80. Saldo 150-80 = 70 zostało wyrównane z drugą najwyższą klasą 50. Bilans 70-50 = 20 został następnie skorygowany względem 15. Bilans 20-15 = 5 został skorygowany przeciwko 10, pozostawiając 5 jajek w tej klasie.

Przykładowe wejście 2:

4 250 80 50 70 20 

Przykładowe wyjście 2:

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

Wyjaśnienie:

Całkowite zamówienie 250 jajek było większe niż całkowita liczba jajek 80+50+70+20 = 220. Stąd ten przepraszający komunikat. 250 zostało najpierw skorygowane w stosunku do klasy z pierwszą najwyższą liczbą jaj 80. Saldo 250-80 = 170 zostało wyrównane z drugą najwyższą klasą 70. Bilans 170-70 = 100 został następnie skorygowany przeciwko 50. Bilans 100-50 = 50 został następnie skorygowany względem 20. Ponieważ Saldo jest większe niż ostatnia klasa jaj, wszystkie oprócz jednego jaja pozostały w tej ostatniej klasie.

Rozwiązanie:

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

Pytanie 3:

Przykładowe pytania Hackerrank: Milk Man and His Bottles

Mleczarz podaje mleko w zapakowanych butelkach o różnych rozmiarach. Możliwe rozmiary butelek to {1, 5, 7 i 10} litrów. Chce on dostarczyć żądaną ilość mleka przy użyciu jak najmniejszej liczby butelek, niezależnie od ich wielkości. Twoim zadaniem jest pomóc mu znaleźć minimalną liczbę butelek potrzebnych do dostarczenia danego zapotrzebowania na mleko.

Format danych wejściowych:

  • Pierwszy wiersz zawiera liczbę przypadków testowych N
  • Następne N wierszy, każdy zawiera dodatnią liczbę całkowitą Li, która odpowiada zapotrzebowaniu na mleko.

Format wyjściowy:

Dla każdej liczby wejściowej Li wypisz minimalną liczbę butelek potrzebną do zaspokojenia zapotrzebowania

Wymagania:

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

Przykładowe dane wejściowe i wyjściowe:

2 7

Objaśnienie:

Liczba przypadków testowych wynosi 2

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

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

Kilka kolejnych przykładów:

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

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

Rozwiązanie:

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

Pytanie 4:

Przykładowe pytania Hackerrank: Bride Hunting

Sam jest kwalifikującym się kawalerem. Postanawia ustatkować się w życiu i założyć rodzinę. Wybiera się na polowanie na pannę młodą. Chce poślubić dziewczynę, która ma co najmniej jedną z 8 cech wymienionych poniżej:-

1) Dziewczyna powinna być bogata.

2) Dziewczyna powinna być inżynierem/lekarzem.

3) Dziewczyna powinna być piękna.

4) Dziewczyna powinna mieć wzrost 5,3″.

5) Dziewczyna powinna pracować w MNC.

6) Dziewczyna powinna być ekstrawertyczką.

7) Dziewczyna nie powinna mieć okularów.

8) Dziewczyna powinna być miła i uczciwa.

On jest w poszukiwaniu panny młodej, która ma niektóre lub wszystkie z 8 cech wymienionych powyżej. Podczas polowania na pannę młodą, może znaleźć więcej niż jedną kandydatkę na jego żonę.

W takim przypadku, chce wybrać dziewczynę, której dom jest najbliżej jego domu. Znajdź pannę młodą dla Sama, która ma maksymalne cechy. Jeśli w przypadku, istnieje więcej niż jedna pretendentka, która znajduje się w równej odległości od domu Sama; wtedy

print „”Poligamia niedozwolona””.

W przypadku, gdy nie ma odpowiedniej dziewczyny, która spełnia kryteria, wtedy wypisz „”Nie znaleziono odpowiedniej dziewczyny””

Dając macierz N*M, dom Sama znajduje się w (1, 1). W tej samej macierzy, położenie dziewczyny nadającej się do zamążpójścia jest również oznaczone przez 1. Stąd 1 w lokalizacji (1, 1) nie powinno być uważane za położenie dziewczyny nadającej się do zamążpójścia.

Właściwości tej dziewczyny, zgodnie z kryteriami Sama, muszą być zdekodowane z liczby niezerowych sąsiadów (max 8-kierunkowych), które posiada. Podobnie do powyższego warunku, 1 w lokalizacji (1, 1) nie powinno być traktowane jako cecha Dziewczyny. Zobacz sekcję Przykład, aby lepiej zrozumieć.

Znajdź Sam, odpowiednią Pannę Młodą i wypisz wiersz i kolumnę Panny Młodej oraz znajdź liczbę cech, które posiada Panna Młoda.

UWAGA: Odległość jest obliczana w liczbie hopów w dowolnym kierunku tj. (Lewo, Prawo, Góra, Dół i Przekątna)

Wymagania:

2 <= N,M <= 10^2

Format wejściowy:

  • Pierwszy wiersz zawiera wiersz (N) i kolumnę (M) domów.
  • Następne N wierszy zawiera dane o dziewczętach i ich cechach.

Format wyjściowy:

Będzie on zawierał wiersz i kolumnę panny młodej oraz liczbę cech, które posiada panna młoda oddzielonych dwukropkiem (tj. :).

Przykładowe wejście 1:

2 9

1 0 1 1 0 1 1 1

0 0 0 1 0 1 0 0 1

Przykładowe wyjście 1:

Wyjaśnienie:

Dziewczynka i cechy występują w punktach (1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,4),(2,6),(2,9).

Dziewczyna obecna w (1,3) ma 2 cechy (tj. (1,4)i (2,4)).

Dziewczyna obecna w (1,4) ma 2 cechy.

Dziewczyna obecna w (1,6) ma 2 cechy.

Panna Młoda obecna w (1,7) ma 3 cechy.

Panna Młoda obecna w (1,8) ma 3 cechy.

Panna Młoda obecna w (1,9) ma 2 cechy.

Panna Młoda obecna w (2,4) ma 2 cechy.

Panna Młoda obecna w (2,6) ma 2 cechy.

Panna Młoda obecna w (2,9) ma 2 cechy.

Jak widzimy, są dwie pretendentki, które mają maksimum cech, jedna jest w (1,7), a druga w (1,8).

Dziewczyna, która jest najbliżej domu Sama jest w (1,7). Stąd, ona jest panną młodą.

Więc, wynik będzie 1:7:3.

Przykładowe wejście 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

Próbka wyjścia 2:

Objaśnienia:

Panna młoda i cechy są obecne w (3,3),(3,4),(3,5),(4,3),(4,4),(4,5),(5,3),(5,4),(5,5)

Panna młoda obecna w (3,3) ma 3 cechy (tj.(3,4),(4,3) i (4,4)).

Oblubienica obecna w (3,4) ma 5 jakości.

Oblubienica obecna w (3,5) ma 3 jakości.

Panna Młoda obecna w (4,3) ma 5 cech.

Panna Młoda obecna w (4,4) ma 8 cech.

Panna Młoda obecna w (4,5) ma 5 cech.

Panna Młoda obecna w (5,3) ma 3 cechy.

Panna Młoda obecna w (5,4) ma 5 cech.

Panna Młoda obecna w (5,5) ma 3 cechy.

Jak widzimy, dziewczyna obecna w (4,4) ma maksymalną liczbę cech. Stąd, ona jest panną młodą.

Więc, wyjście będzie 4:4:8.

Rozwiązanie:

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

Możesz też sprawdzić te:

  • Musisz ćwiczyć Struktury danych & Pytania dotyczące algorytmów
  • Musisz ćwiczyć pytania dotyczące programowania w języku C
Jeśli masz jakieś opinie na temat tego artykułu i chcesz go poprawić, napisz na adres [email protected]

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.