Numéro 26: Formation informatique - problèmes et défis actuels des grandes entreprises

Urgent dans la chambre! Relance de la rubrique formation informatique. Nous avons à nouveau rassemblé les questions et les tâches posées lors des entretiens dans les entreprises informatiques.

image

Des problèmes apparaîtront chaque semaine - restez à l'écoute! La rubrique est soutenue par l'agence de recrutement Spice IT .

Aujourd'hui, nous avons des tâches - de niveaux de complexité très différents - des entretiens à la société indienne Flipkart. Eh bien, avez passé la sécurité sociale?

Des questions


1. Voleur, trésor et 2 portes
Un voleur vient de découvrir une paire d'anciennes grottes au trésor. L'une des grottes est remplie de trésors incroyables et l'autre a un monstre cracheur de feu qui mange tous ceux qui ouvrent cette grotte.
Une grotte a une porte noire décorée de diamants et l'autre grotte a une porte brune décorée de saphirs.
Chacune des portes a une description gravée sur le dessus. Les descriptions disent:

Black Door: Monster est là.
Porte brune: une seule porte dit la vérité.

Quelle porte le voleur devrait-il ouvrir?

La traduction
Le voleur vient de trouver quelques grottes anciennes. L'une des grottes regorge de trésors incroyables, et dans une autre, il y a un monstre cracheur de feu qui dévorera tous ceux qui ouvriront cette grotte.
L'entrée de la première grotte est bloquée par une porte noire décorée de diamants, et dans une autre - une porte brune décorée de saphirs.
Chaque porte a une description gravée sur le dessus. Descriptions lues:

Porte noire: le monstre est là.
Porte brune: une seule porte dit la vérité.

Quelle porte un voleur devrait-il ouvrir?

2. Trouver l'âge des filles
Alok a trois filles. Son ami Shyam veut connaître l'âge de ses filles. Alok lui donne un premier indice.
  1. Le produit de leur âge est de 72 ans. Shyam dit que ce n'est pas assez d'informations qu'Alok lui donne un deuxième indice.
  2. La somme de leurs âges est égale à mon numéro de maison. Shyam sort et regarde le numéro de la maison et dit: «Je n'ai toujours pas assez d'informations pour déterminer les âges». Alok admet que Shyam ne peut pas deviner et lui donne le troisième indice
  3. La plus vieille des filles aime la glace à la fraise. Shyam est capable de deviner après le troisième indice.

Pouvez-vous deviner quel est l'âge de trois filles?

La traduction
Alok a trois filles. Son ami Shiyam veut connaître l'âge de ses filles. Alok lui donne le premier indice.
  1. Le produit de leur âge est de 72 ans. Shiyam dit que cette information n'est pas suffisante, puis Alok lui donne un deuxième indice.
  2. La somme de leurs âges est égale au nombre de ma maison. Shiyam sort, regarde le numéro de la maison et dit: "Je n'ai toujours pas assez d'informations pour déterminer l'âge." Alok admet que Shiyam ne pourra pas deviner, et lui donne donc un troisième indice.
  3. L'aînée des filles aime la crème glacée aux fraises. Ce n'est qu'après le troisième indice que Shiyama a réussi à deviner l'âge de ses filles.

Pouvez-vous deviner quel âge chacune des trois filles a?

Les tâches


1. Tom et Jerry
Depuis très longtemps, Tom et Jerry se battent pour un morceau de fromage. Alors finalement vous êtes venu à la rescousse et avez décidé que le résultat du combat serait décidé par un jeu mathématique, dans lequel vous écrirez un nombre N (1 <= N <= 10^6) . Tom et Jerry joueront le jeu alternativement et chacun d'eux soustraira un nombre n [n < N] tel que N % n = 0 .
Le jeu se répète tour à tour jusqu'à ce que celui qui ne peut plus bouger perd le jeu.
Le jeu commence avec Tom jouant le premier coup. Il est bien entendu que les deux se déplaceront de manière optimale. Vous devez déterminer qui remporte la partie.

Entrée: la première ligne de chaque cas de test se compose de N le nombre.
Sortie: imprimer 1 si Tom gagne et imprimer 0 si Jerry gagne sur une ligne distincte.

Contraintes:
1 <= N <= 10^6

Échantillon:
Entrée: 2 / Sortie: 1
Entrée: 4 / Sortie: 1

La traduction
Pendant longtemps, Tom et Jerry se sont battus pour un morceau de fromage. Vous avez décidé de les aider à déterminer rapidement le gagnant. Le résultat du match sera décidé dans un jeu mathématique dans lequel vous écrirez le nombre N (1 <= N <= 10^6) . Tom et Jerry joueront le jeu un à la fois. Chacun d'eux soustraira le nombre n [n < N] pour que N % n = 0 .
Le jeu se poursuit jusqu'à ce que l'un des participants puisse bouger. Quiconque ne peut pas faire le dernier pas perd.
Le jeu commence avec Tom faisant le premier pas. Il est clair que les deux feront des mouvements de manière optimale. Vous devez déterminer qui remporte la partie.

Entrée: la première ligne d'entrée de chaque test est constituée du nombre N.
Le programme devrait afficher: 1, si Tom gagne; 0 si Jerry gagne. Dans une ligne distincte.

Limitations:
1 <= N <= 10 ^ 6

Exemple
Entrée: 2 / Sortie: 1
Entrée: 4 / Sortie: 1

2. N réunions dans une pièce
Il y a une salle de réunion dans une entreprise. Il y a N réunions sous la forme de (S[i], F[i]) où S [i] est l'heure de début de la réunion i et F [i] est l'heure de fin de la réunion i.
Quel est le nombre maximum de réunions pouvant être accueillies dans la salle de réunion?

Entrée:
La première ligne d'entrée comprend le nombre de cas de test. La description des cas de test T est la suivante:
La première ligne se compose de la taille du tableau, la deuxième ligne contient le tableau contenant l'heure de début de toutes les réunions, chacune séparée par un espace, c'est-à-dire S [i]. Et la troisième ligne a le tableau contenant l'heure de fin de toutes les réunions séparées chacune par un espace, c'est-à-dire F [i].
Sortie:
Dans chaque ligne distincte, imprimez l'ordre dans lequel les réunions ont lieu séparées par un espace.

Contraintes:
1 ≤ T ≤ 70
1 ≤ N ≤ 100
1 ≤ S[ i ], F[ i ] ≤ 100000


Exemple:
Entrée:
2
6
1 3 0 5 8 5
2 4 6 7 9 9
8
75250 50074 43659 8931 11273 27545 50879 77924
112960 114515 81825 93424 54316 35533 73383 160252

Sortie:
1 2 4 5
6 7 1

La traduction
L'entreprise dispose d'une salle de réunion. Il existe N réunions sous la forme (S [i], F [i]) , où S [i] est l'heure de début de la réunion i et F [i] est l'heure de fin de la réunion i.
La tâche consiste à placer le nombre maximum de réunions dans la salle de réunion.

Données d'entrée:
La première ligne d'entrée contient le nombre de tests. La description des tests ressemble à ceci:
• la première ligne se compose de la taille du tableau;
• la deuxième ligne a un tableau contenant l'heure de début de toutes les réunions S [i], chacune étant séparée par un espace;
• la troisième ligne contient un tableau contenant l'heure de fin de toutes les réunions F [i], chacune étant séparée par un espace.
Conclusion:
dans chaque ligne distincte, imprimez l'ordre dans lequel les réunions ont lieu, séparées par des espaces.

Limitations:
1 ≤ T ≤ 70
1 ≤ N ≤ 100
1 ≤ S [i], F [i] ≤ 100000


Un exemple:
Entrée:
2
6
1 3 0 5 8 5
2 4 6 7 9 9
8
75250 50074 43659 8931 11273 27545 50879
77924 112960 114515 81825 93424 54316 35533 73383 160252

Sortie:
1 2 4 5
6 7 1


3. Inversion du tableau
Étant donné un tableau d'entiers positifs. La tâche consiste à trouver le nombre d'inversion du tableau.
Nombre d'inversion: pour un tableau, le nombre d'inversion indique la distance (ou la fermeture) à laquelle le tableau doit être trié. Si le tableau est trié dans l'ordre inverse, le nombre d'inversion est le maximum.
Formellement, deux éléments a [i] et a [j] forment une inversion si a[i] > a[j] et i < j .

Entrée: La première ligne d'entrée contient un entier T indiquant le nombre de cas de test. La première ligne de chaque scénario de test est N, la taille du tableau. La deuxième ligne de chaque scénario de test contient N éléments.
Sortie: affiche le nombre d'inversion du tableau.

Contraintes:
1 ≤ T ≤ 100
1 ≤ N ≤ 107
1 ≤ C ≤ 1018


Exemple:
Entrée:
1
5
2 4 1 3 5

Sortie:
3

La traduction
Un tableau de nombres naturels est donné. La tâche consiste à trouver le nombre d'inversions du tableau.
Nombre d'inversions: pour un tableau, le nombre d'inversions indique la distance (ou la fermeture) du tableau par rapport au tri. Si le tableau est déjà trié, le nombre d'inversions est égal à 0. Si le tableau est trié dans l'ordre inverse, le nombre d'inversions est le maximum.
Formellement, deux éléments a [i] et a [j] forment une inversion si a[i] > a[j] et i < j .

Données d'entrée:
la première ligne contient un entier T, indiquant le nombre de tests. La première ligne de chaque test est N, la taille du tableau. La deuxième ligne de chaque test contient N éléments.
Sortie:
afficher le nombre d'inversions du tableau.

Limitations:
1 ≤ T ≤ 100
1 ≤ N ≤ 10 7
1 ≤ C ≤ 10 18


Un exemple:
Entrée:
1
5
2 4 1 3 5

Sortie:
3


Eh bien, comme promis! Beaucoup ont pu répondre aux questions, mais avec les tâches, apparemment, c'était plus difficile! :)

Les réponses


Question 1
Réponse: à la porte noire.
Solution: regardons la description de la porte brune «une seule porte dit la vérité». Cela peut être vrai ou faux.
Scénario 1: la description de la porte brune est vraie. Alors la description sur la porte noire ("le monstre est ici") devrait être un mensonge. Cela signifie que la grotte avec la porte noire contient des trésors!
Scénario 2: la description de la porte brune est fausse. Ensuite, les deux descriptions sont fausses ou les deux vraies. Les deux descriptions ne peuvent pas être vraies, car cela est impossible et n'est pas cohérent. Cela signifie que les deux descriptions sont fausses. Encore une fois, un trésor dans la porte noire.

Question 2
Réponse: âge des filles: 3 ans, 3 ans et 8 ans.
Solution: 1) Pour commencer, on dit que le produit des âges est 72.
Retrouvez toutes les options possibles pour lesquelles le produit sera égal à 72:
  • 1 * 1 * 72 = 72
  • 1 * 2 * 36 = 72
  • 1 * 3 * 24 = 72
  • 1 * 4 * 18 = 72
  • 1 * 6 * 12 = 72
  • 1 * 8 * 9 = 72
  • 2 * 2 * 18 = 72
  • 2 * 3 * 12 = 72
  • 2 * 4 * 9 = 72
  • 2 * 6 * 6 = 72
  • 3 * 3 * 8 = 72
  • 3 * 4 * 6 = 72

Bien entendu, cela ne suffit pas pour donner une réponse exacte.
Ensuite, Shiyam regarde le numéro de la maison (lequel numéro n'est pas signalé) et ne peut toujours pas donner de réponse exacte. Résumez toutes les options trouvées précédemment:
  • 1 + 1 + 72 = 74
  • 1 + 2 + 36 = 39
  • 1 + 3 + 24 = 28
  • 1 + 4 + 18 = 23
  • 1 + 6 + 12 = 19
  • 1 + 8 + 9 = 18
  • 2 + 2 + 18 = 22
  • 2 + 3 + 12 = 17
  • 2 + 4 + 9 = 15
  • 2 + 6 + 6 = 14
  • 3 + 3 + 8 = 14
  • 3 + 4 + 6 = 13

De toute évidence, l'une des sommes est le numéro de la maison. Étant donné que Shiyam n'a pas pu répondre exactement, la conclusion sans équivoque est que le numéro de maison est 14, car il existe deux options avec ce résultat.
  • 2 + 6 + 6 = 14
  • 3 + 3 + 8 = 14

3) À partir du troisième indice, il faut comprendre qu'il y a une fille plus âgée (pas plusieurs, mais une), par conséquent, parmi les deux options que nous avons trouvées dans la deuxième étape, une seule convient.

Tâche 1
Lolohaev pensait bien!
Réponse: (n - 1) % 2
Solution:
 using System; public class TomJerry { static public void Main () { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.printIn((n - 1) % 2); } } 


Tâche 2
La solution a utilisé l'algorithme Greedy.
 #include <bits/stdc++.h> using namespace std; struct Activity { int start, finish, index; }; bool activityCompare(Activity s1, Activity s2) { return s1.finish < s2.finish; } int main() { int t, n, i, j; cin >> t; while (t--) { cin >> n; Activity arr[n]; for (i = 0; i < n; i++) { cin >> arr[i].start; arr[i].index = i; } for (i = 0; i < n; i++) cin >> arr[i].finish; sort(arr, arr + n, activityCompare); i = 0; cout << arr[i].index + 1 << " "; for (int j = 1; j < n; j++) { if (arr[j].start >= arr[i].finish) { cout << arr[j].index + 1 << " "; i = j; } } cout << endl; } return 0; } 


Tâche 3
 #include<iostream> using namespace std; int merge(int* arr, int* LArr, int* RArr, int m, int n) { int i = 0, j = 0, k = 0; int count = 0; while (i < m && j < n) { if (LArr[i] <= RArr[j]) arr[k++] = LArr[i++]; else { arr[k++] = RArr[j++]; count = count + m - i; } } while (i < m) arr[k++] = LArr[i++]; while (j < n) arr[k++] = RArr[j++]; return count; } int mergeSort(int* arr, int start, int end) { if (start > end) return 0; if (start == end) return 0; if (start == end - 1) { if (arr[start] <= arr[end]) return 0; else swap(arr[start], arr[end]); return 1; } int mid = (start + end) / 2; int* LArr = new int[mid + 1]; int* RArr = new int[end - mid]; int i; for (i = start; i <= mid; i++) LArr[i] = arr[i]; for (i = mid + 1; i <= end; i++) RArr[i - (mid + 1)] = arr[i]; int count = 0; count += mergeSort(LArr, 0, mid); count += mergeSort(RArr, 0, end - mid - 1); count += merge(arr, LArr, RArr, mid + 1, end - mid); delete[] LArr; delete[] RArr; return count; } int main() { int t, n,*arr; cin >> t; while (t--) { cin >> n; arr = new int[n]; for (int i = 0; i < n; i++) cin >> arr[i]; cout << mergeSort(arr, 0, n - 1) << endl; } } 

Source: https://habr.com/ru/post/fr477460/


All Articles