Aujourd'hui, nous avons préparé le dernier numéro de la formation informatique dans le format actuel.

Nous avons sélectionné pour vous des tùches à partir d'entretiens chez Cisco. Ils posent des questions non seulement sur le routage et le matériel (il y a de telles questions dans la sélection), mais aussi sur des tùches logiques. Les plus intéressants d'entre eux vous attendent sous la coupe.
Il convient également de noter que cette version sera la derniÚre dans ce format, mais se poursuivra sous une forme modifiée. Nous avons décidé de changer le format et la plate-forme pour les prochains numéros de formation informatique - la suite se fera dans un programmeur type.
Des questions
- Aimant, magnétique et non magnétique
Comment différencier un aimant, un matériau magnétique et un matériau non magnétique?
La traductionComment distinguer aimant, matériau magnétique et non aimant? ( environ. Question sur le fer dans une perspective inattendue. Nécessite une certaine connaissance de la physique )
- Infection virale
Le monde est confrontĂ© Ă une grave infection virale. Le gouvernement de divers pays a dĂ©livrĂ© Ă chaque citoyen deux bouteilles. Vous avez Ă©galement reçu la mĂȘme chose. Maintenant, un comprimĂ© de chaque bouteille doit ĂȘtre pris chaque jour pendant un mois pour devenir immunisĂ© contre le virus. Le problĂšme est que si vous n'en prenez qu'un ou si vous en prenez deux dans la mĂȘme bouteille, vous mourrez d'une mort douloureuse.
En l'utilisant, vous ouvrez les bouteilles Ă la hĂąte et versez les comprimĂ©s dans votre main. Trois comprimĂ©s tombent dans votre main et vous vous rendez compte qu'ils se ressemblent exactement et ont les mĂȘmes caractĂ©ristiques. Vous ne pouvez pas jeter la pilule car elle est limitĂ©e et vous ne pouvez pas la remettre ou vous pouvez la mal faire et peut mourir un jour. Comment rĂ©soudriez-vous ce problĂšme?
La traductionLe monde est confrontĂ© Ă une terrible infection virale. Les gouvernements de tous les pays donnent Ă chaque citoyen deux bouteilles de mĂ©dicaments. On vous a donnĂ© le mĂȘme kit. Vous devez prendre un comprimĂ© de chaque bouteille par jour pendant un mois afin de bĂ©nĂ©ficier d'une immunitĂ© contre le virus. Si vous ne prenez qu'une ou deux pilules dans la mĂȘme bouteille, une mort douloureuse s'ensuivra.
En prenant une autre portion de comprimĂ©s, vous ouvrez les deux flacons et versez rapidement les comprimĂ©s dans votre paume. Tard, mais vous comprenez que trois pilules se sont rĂ©pandues, ainsi que le fait qu'elles se ressemblent exactement. La tablette ne peut pas ĂȘtre jetĂ©e, car leur quantitĂ© est limitĂ©e, et vous ne pouvez pas la remettre, sinon, en cas d'erreur, vous mourrez un jour. Comment rĂ©soudriez-vous ce problĂšme?
( Remarque Une tùche similaire figurait déjà dans les versions antérieures. )
Les tĂąches
- Trier les éléments par fréquence
Imprime les Ă©lĂ©ments d'un tableau dans la frĂ©quence dĂ©croissante. Si 2 nombres ont la mĂȘme frĂ©quence, imprimez celui qui est arrivĂ© en premier.
Exemples:
Entrée: arr [] = {2, 5, 2, 8, 5, 6, 8, 8}
Sortie: arr [] = {8, 8, 8, 2, 2, 5, 5, 6}
Entrée: arr [] = {2, 5, 2, 6, -1, 9999999, 5, 8, 8, 8}
Sortie: arr [] = {8, 8, 8, 2, 2, 5, 5, 6, -1, 9999999}
La traductionImprime les Ă©lĂ©ments du tableau par ordre dĂ©croissant de frĂ©quence d'occurrence. Si deux nombres ont la mĂȘme frĂ©quence, Ă©mettez d'abord ce qui se produit en premier.
Exemples:
Entrée: arr [] = {2, 5, 2, 8, 5, 6, 8, 8}
Sortie: arr [] = {8, 8, 8, 2, 2, 5, 5, 6}
Entrée: arr [] = {2, 5, 2, 6, -1, 9999999, 5, 8, 8, 8}
Sortie: arr [] = {8, 8, 8, 2, 2, 5, 5, 6, -1, 9999999}
- Vérifiez bst
Un arbre de recherche binaire (BST) est une structure de donnĂ©es d'arbre binaire basĂ©e sur un nĆud qui a les propriĂ©tĂ©s suivantes.
âą La sous-arborescence gauche d'un nĆud ne contient que des nĆuds avec des clĂ©s infĂ©rieures Ă la clĂ© du nĆud.
âą Le sous-arbre droit d'un nĆud ne contient que des nĆuds avec des clĂ©s supĂ©rieures Ă la clĂ© du nĆud.
âą Les sous-arborescences gauche et droite doivent Ă©galement ĂȘtre des arbres de recherche binaires.
Des propriétés ci-dessus, il résulte naturellement que:
âą Chaque nĆud (Ă©lĂ©ment dans l'arborescence) a une clĂ© distincte.
4
/ \
2 5
/ \
1 3
Votre tùche consiste à créer un programme pour vérifier si un arbre binaire est BST ou non.
La traductionĂtant donnĂ© un
arbre de recherche binaire qui a les propriétés suivantes:
* Le sous-arbre gauche de chaque nĆud contient des nombres infĂ©rieurs Ă la valeur de ce nĆud.
* Le sous-arbre droit de chaque nĆud contient des nombres supĂ©rieurs Ă la valeur de ce nĆud.
* Les sous-arbres gauche et droit sont des arbres de recherche binaires.
D'aprĂšs ce qui est dĂ©crit, il s'ensuit que chaque nĆud de l'arborescence contient une clĂ© unique.
4
/ \
2 5
/ \
1 3
Votre tùche consiste à écrire un programme pour vérifier si l'arbre est un arbre de recherche binaire ou non.
- Litre, eau et 2 vases Ă coprime Ă smocks
Il existe deux navires de capacités «a» et «b» respectivement. Nous avons un approvisionnement en eau infini. Donnez un algorithme efficace pour faire exactement 1 litre d'eau dans l'un des récipients. Vous pouvez jeter toute l'eau de n'importe quel navire à tout moment. Supposons que «a» et «b» soient des coprimes.
La traductionCompte tenu de 2 navires avec une capacité de «a» et «b» et une source infinie d'eau. Suggérer un algorithme efficace pour mesurer exactement 1 litre d'eau à l'aide de ces récipients. Vous pouvez verser toute l'eau de n'importe quel récipient à tout moment. Nous supposons également que «a» et «b»
sont des coprimes .
Les réponses seront données dans la semaine prochaine - ayez le temps de décider. Bonne chance
Des solutions
Question 2Dans les commentaires, ils ont suggéré la bonne solution -
ici et
ici - ainsi que quelques options.
TĂąche 1Solution initiale:
#include<bits/stdc++.h> using namespace std; // Used for sorting struct ele { int count, index, val; }; // Used for sorting by value bool mycomp(struct ele a, struct ele b) { return (a.val < b.val); } // Used for sorting by frequency. And if frequency is same, // then by appearance bool mycomp2(struct ele a, struct ele b) { if (a.count != b.count) return (a.count < b.count); else return a.index > b.index; } void sortByFrequency(int arr[], int n) { struct ele element[n]; for (int i = 0; i < n; i++) { element[i].index = i; /* Fill Indexes */ element[i].count = 0; /* Initialize counts as 0 */ element[i].val = arr[i]; /* Fill values in structure elements */ } /* Sort the structure elements according to value, we used stable sort so relative order is maintained. */ stable_sort(element, element+n, mycomp); /* initialize count of first element as 1 */ element[0].count = 1; /* Count occurrences of remaining elements */ for (int i = 1; i < n; i++) { if (element[i].val == element[i-1].val) { element[i].count += element[i-1].count+1; /* Set count of previous element as -1 , we are doing this because we'll again sort on the basis of counts (if counts are equal than on the basis of index)*/ element[i-1].count = -1; /* Retain the first index (Remember first index is always present in the first duplicate we used stable sort. */ element[i].index = element[i-1].index; } /* Else If previous element is not equal to current so set the count to 1 */ else element[i].count = 1; } /* Now we have counts and first index for each element so now sort on the basis of count and in case of tie use index to sort.*/ stable_sort(element, element+n, mycomp2); for (int i = n-1, index=0; i >= 0; i--) if (element[i].count != -1) for (int j=0; j<element[i].count; j++) arr[index++] = element[i].val; } // Driver program int main() { int arr[] = {2, 5, 2, 6, -1, 9999999, 5, 8, 8, 8}; int n = sizeof(arr)/sizeof(arr[0]); sortByFrequency(arr, n); for (int i=0; i<n; i++) cout << arr[i] << " "; return 0; }
TĂąche 2Solution Java:
/Java implementation to check if given Binary tree
TĂąche 3Option de solution:
#include <iostream> using namespace std; // A utility function to get GCD of two numbers int gcd(int a, int b) { return b? gcd(b, a % b) : a; } // Class to represent a Vessel class Vessel { // A vessel has capacity, and current amount of water in it int capacity, current; public: // Constructor: initializes capacity as given, and current as 0 Vessel(int capacity) { this->capacity = capacity; current = 0; } // The main function to fill one litre in this vessel. Capacity of V2 // must be greater than this vessel and two capacities must be co-prime void makeOneLitre(Vessel &V2); // Fills vessel with given amount and returns the amount of water // transferred to it. If the vessel becomes full, then the vessel // is made empty. int transfer(int amount); }; // The main function to fill one litre in this vessel. Capacity // of V2 must be greater than this vessel and two capacities // must be coprime void Vessel:: makeOneLitre(Vessel &V2) { // solution exists iff a and b are co-prime if (gcd(capacity, V2.capacity) != 1) return; while (current != 1) { // fill A (smaller vessel) if (current == 0) current = capacity; cout << "Vessel 1: " << current << " Vessel 2: " << V2.current << endl; // Transfer water from V1 to V2 and reduce current of V1 by // the amount equal to transferred water current = current - V2.transfer(current); } // Finally, there will be 1 litre in vessel 1 cout << "Vessel 1: " << current << " Vessel 2: " << V2.current << endl; } // Fills vessel with given amount and returns the amount of water // transferred to it. If the vessel becomes full, then the vessel // is made empty int Vessel::transfer(int amount) { // If the vessel can accommodate the given amount if (current + amount < capacity) { current += amount; return amount; } // If the vessel cannot accommodate the given amount, then // store the amount of water transferred int transferred = capacity - current; // Since the vessel becomes full, make the vessel // empty so that it can be filled again current = 0; return transferred; } // Driver program to test above function int main() { int a = 3, b = 7; // a must be smaller than b // Create two vessels of capacities a and b Vessel V1(a), V2(b); // Get 1 litre in first vessel V1.makeOneLitre(V2); return 0; }