Je préférerai une solution avec un tableau à deux dimension . mais déja dans mon premier code j'arrive pas a remplir mon tableau avec un while ? après j'aurai juste a rechercher les valeurs communes ?
Je préférerai une solution avec un tableau à deux dimension . mais déja dans mon premier code j'arrive pas a remplir mon tableau avec un while ? après j'aurai juste a rechercher les valeurs communes ?
Transformer le code pour utiliser un tableau classique n'a rien de sorcier, on ne va pas réaliser l'exercice à ta place.
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Juste pour dire qu'on peut utiliser un unsigned char pour un chiffre
Je ne l'aide pas oui et non. Dans un sens lorsque tu vois la solution donnée par Bousk, tu veux aider comment
Moi j'étais parti sur une aide en C++ (sans donner de réponse), et en définitive il n'y a qu'une boucle
Surtout que l'algo est ultra-simplifié parce que les index vont de droite à gauche et commence à 0: on ne peut pas faire moins
Et effectivement le multimap est la « bonne » collection
Mais j'étais parti sur une liste de liste [ou assimilé]
Fais attention ces index commencent à zéro. Il faut initialiser avec une valeur supérieure à 10![]()
Pas bête un simple entier utilisé en bitset pour les positions
Ca ferait ça je crois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 std::vector< unsigned int > CountNumbers(unsigned int _uiNb) { std::vector< unsigned int > vec(10, 0); unsigned int i = 0; while (_uiNb) { vec[_uiNb%10] |= (1<<i); _uiNb /= 10; } return vec; }
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Un multimap ce n'est pas terrible
- Les clefs sont triées mais pas les valeurs qui arrivent par ordre d'insertion [avec mon gcc à moi au moins]
- On perd l'association 1 clef <-> plusieurs index
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #include <iostream> #include <map> int main() { int number = 7377683; std::multimap<unsigned char, short> list; int tmp = number, reverse_number = 0; short max_index = 0, index = 0; unsigned char digit = 0; while(tmp >= 10) { reverse_number = ((reverse_number * 10) + (tmp % 10)); tmp = (tmp / 10); max_index++; } max_index++; reverse_number = ((reverse_number * 10) + tmp); for(tmp = reverse_number, index = 1; index <= max_index; index++) { digit = (tmp % 10); tmp = (tmp / 10); std::cout << "Find " << (int) digit << " (" << index << ")" << std::endl; list.insert( std::pair<unsigned char, short>(digit, index) ); } digit = 10; // Fake value for(std::multimap<unsigned char, short>::iterator it = list.begin(); it != list.end(); ++it) { if (digit == it->first) { std::cout << " - " << it->second; } else { std::cout << std::endl << "Digit: " << (int) it->first << std::endl << it->second; digit = it->first; } } return 0; }
Partager