00001
00002
00003
00004
00005
00006
00007 #include <TMath.h>
00008
00009 int permuteSimple1 ()
00010 {
00011 printf("\nTMath::Permute simple test\n");
00012 printf("==========================\n");
00013 char aa='a';
00014 Int_t a[4];
00015 Int_t i;
00016 Int_t icount=0;
00017 for(i=0; i<4; i++) a[i]=i;
00018 do {
00019 icount++;
00020 for(Int_t i=0;i<4;printf("%c",static_cast<char>(aa+a[i++]))); printf("\n");
00021 } while(TMath::Permute(4,a));
00022 printf("Found %d permutations = 4!\n",icount);
00023 return 0;
00024 }
00025
00026 int permuteSimple2 ()
00027 {
00028 printf("\nTMath::Permute simple test with repetition\n");
00029 printf("==========================================\n");
00030 char aa='a'-1;
00031 Int_t a[6];
00032 Int_t i;
00033 Int_t icount=0;
00034 for(i=0; i<6; i++) a[i]=(i+2)/2;
00035 do {
00036 icount++;
00037 for(Int_t i=0;i<5;printf("%c",static_cast<char>(aa+a[i++]))); printf("\n");
00038 } while(TMath::Permute(5,a));
00039 printf("Found %d permutations = 5!/(2! 2!)\n",icount);
00040 return 0;
00041 }
00042
00043 Int_t permuteFancy()
00044 {
00045 Int_t a[10];
00046 Int_t &n=a[0], &i=a[1];
00047 Int_t &e=a[2], &t=a[3];
00048 Int_t &h=a[4], &r=a[5];
00049 Int_t &f=a[6], &o=a[7];
00050 Int_t &s=a[8], &u=a[9];
00051 Int_t nine, three, neuf, trois;
00052
00053 printf("\nTMath::Permute fancy test\n");
00054 printf("=========================\n");
00055 printf("This is a program to calculate the solution to the following problem\n");
00056 printf("Find the equivalence between letters and numbers so that\n\n");
00057 printf(" NINE*THREE = NEUF*TROIS\n\n");
00058 for(Int_t ii=0; ii<10; ii++) a[ii]=ii;
00059 do {
00060 nine=((n*10+i)*10+n)*10+e;
00061 neuf=((n*10+e)*10+u)*10+f;
00062 three=(((t*10+h)*10+r)*10+e)*10+e;
00063 trois=(((t*10+r)*10+o)*10+i)*10+s;
00064 if(nine*three==neuf*trois) {
00065 printf("Solution found!\n\n");
00066 printf("T=%d N=%d E=%d S=%d F=%d H=%d R=%d I=%d O=%d U=%d\n",t,n,e,s,f,h,r,i,o,u);
00067 printf("NINE=%d THREE=%d NEUF=%d TROIS=%d\n",nine,three,neuf,trois);
00068 printf("NINE*THREE = NEUF*TROIS = %d\n",neuf*trois);
00069 return 0;
00070 }
00071 } while(TMath::Permute(10,a));
00072 printf("No solutions found -- something is wrong here!\n");
00073 return 0;
00074 }
00075
00076 void permute() {
00077 permuteSimple1();
00078 permuteSimple2();
00079 permuteFancy();
00080 }