2011-10-03 2 views
-1

Je suis en train de prendre un certain nombre et le changer à quelque chose comme ceci:Permutation en C, C++, C# ou Objective-C

Number Change To  
1  0001A  
2  0002A 
3  0003A 
4  0001B 
5  0002B  
6  0003B 
7  0001C 
8  0002C 
9  0003C  
10  0001AA 
11  0002AA 
12  0003AA 
13  0001AB 
14  0002AB 
15  0003AB 
10  0001AC 
11  0002AC 
12  0003AC 
13  0001BA 
14  0002BA 
15  0003BA 

etc ...

Donc, en utilisant les lettres A ', 'B', 'C' Et en utilisant les nombres 1,2,3

+0

Merci Wooble, pour répondre à ce que ce n'est pas. Très utile. – jfbomber

Répondre

0

Pour la plupart de vos entrées, les 'chiffres' les plus à gauche semblent changer le plus rapidement, jusqu'à ce que vous arriviez à la transition 12-> 13, où le milieu chiffres changements les plus lents:

1A 
2A 
3A 
... 
2AA 
3AA 
1AB 
2AB 
... 

Ceci est certainement difficile et exigera probablement beaucoup d'effort supplémentaire au code d'un système où le droit le plus ou le plus à gauche chiffres change le plus rapide est strictement suivi:

1A 
2A 
3A 
... 
2AA 
3AA 
1BA 
2BA 
... 

ou

1 
2 
3 
a 
b 
c 
11 
12 
13 
1a 
1b 
1c 
21 
22 
23 
... 

Si vous devez suivre exactement le schéma que vous avez donné ici, alors je vous recommande une recherche-table et hardcode simplement ce schéma dans votre source:

#include <stdio.h> 

int main(int argc, char* argv[]) { 
    char table[][5]={"ZERO", "1A", "2A", "3A", "1B", "2B", "3B", "1C", "2C", "3C", 
          "1AA", "2AA", "3AA", "1AB", "2AB", "3AB", "1AC", "2AC", "3AC"}; 
    int i; 
    for (i=1; i<argc; i++) { 
     int input=atoi(argv[i]); 
     printf("%d\t%s\n", input, table[input]); 
    } 
    return 0; 
} 

Veuillez ne pas utiliser ce code directement - je n'ai pas fait aucune validation d'entrée ou vérification des limites de tableau. Bien sûr, j'espère que vous choisirez une approche totalement différente - cette simple substitution de mot de code fonctionne bien pour un nombre spécifique d'entrées, mais un jour quelqu'un pourrait vouloir entrer un nombre plus grand que celui que vous avez dans votre tableau. (Dans ce cas, quand quelqu'un veut convertir 19, il échouera.)

Une approche plus générique, converting between bases, est un algorithme de conversion entre deux bases de nombres quelconques. Dans votre cas, il pourrait convertira en base 6 avec les chiffres 1, 2, 3, A, B, C (si vous adhérez strictement soit un plus à gauche change le plus rapide ou le plus à droite change approche la plus rapide).