fork(1) download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void swap( char* a, char* b )
  5. {
  6. char t = *a;
  7. *a = *b;
  8. *b = t;
  9. }
  10.  
  11. void reverse( char* str, int low, int high )
  12. {
  13. while( low < high )
  14. {
  15. swap( &str[low], &str[high] );
  16. ++low;
  17. --high;
  18. }
  19. }
  20.  
  21. void cycleLeaderIteration( char* str, int shift, int len )
  22. {
  23. int i, j, item, element;
  24.  
  25. for( i = 1; i < len; i *= 3 )
  26. {
  27. j = i;
  28.  
  29. item = str[j + shift];
  30. do
  31. {
  32. // odd index
  33. if( j & 1 )
  34. j = len / 2 + j / 2;
  35. // even index
  36. else
  37. j /= 2;
  38.  
  39. // keep the back-up of element at new position
  40. element = str[j + shift];
  41.  
  42. str[j + shift] = item;
  43.  
  44. item = element;
  45. } while( j != i );
  46. }
  47. }
  48.  
  49. void moveNumberToSecondHalf( char* str )
  50. {
  51. cycleLeaderIteration( str, 0, strlen( str ) );
  52. }
  53.  
  54. void Test()
  55. {
  56. int len, i, alph, digit ;
  57. char str[100];
  58.  
  59. for( len = 2; len <= 52; len += 2 )
  60. {
  61. for( i = 0; i < len; i++ )
  62. {
  63. if( i & 1 )
  64. str[i] = i / 2 % 9 + 1 + '0';
  65. else
  66. str[i] = i / 2 + 'a';
  67. }
  68. str[ len ] = '\0';
  69.  
  70. printf( "Test case#%d\n", len / 2 );
  71. printf( "%s\n", str );
  72.  
  73. moveNumberToSecondHalf( str );
  74.  
  75. printf( "%s\n\n\n", str );
  76. }
  77. }
  78.  
  79. int main()
  80. {
  81. Test();
  82.  
  83. return 0;
  84. }
Success #stdin #stdout 0.01s 1676KB
stdin
Standard input is empty
stdout
Test case#1
a1
a1


Test case#2
a1b2
ab12


Test case#3
a1b2c3
ac2b13


Test case#4
a1b2c3d4
abcd1234


Test case#5
a1b2c3d4e5
abcde12345


Test case#6
a1b2c3d4e5f6
ae3bf4c15d26


Test case#7
a1b2c3d4e5f6g7
ae26d15cg4bf37


Test case#8
a1b2c3d4e5f6g7h8
abcge3541df627h8


Test case#9
a1b2c3d4e5f6g7h8i9
acedifgh8b23416579


Test case#10
a1b2c3d4e5f6g7h8i9j1
aei37bfj48cg159dh261


Test case#11
a1b2c3d4e5f6g7h8i9j1k2
abcde3g4ijf127h56981k2


Test case#12
a1b2c3d4e5f6g7h8i9j1k2l3
aei153b4j2f6cgh879d1k2l3


Test case#13
a1b2c3d4e5f6g7h8i9j1k2l3m4
aeim433dhlf72cg8261bkj1594


Test case#14
a1b2c3d4e5f6g7h8i9j1k2l3m4n5
abcdefghijklmn12345678912345


Test case#15
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6
ai21dl54go8bj32em65h19ck43fn76


Test case#16
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7
abcdefg4ijk6m7hp123152l894n3o567


Test case#17
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8
abcme384idf6p7h2q1g1k2l359njo45678


Test case#18
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9
acegi3m4q1f579h868bdk2jln4r2o6p13579


Test case#19
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9s1
aiq65dl198go43bjr76em219hp54cks87fn321


Test case#20
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9s1t2
abcmef54i8klj7h2q9511g33s6n2o6d74pr981t2


Test case#21
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9s1t2u3
acegikmoqsu2468135792bdfhjlnprt13579246813


Test case#22
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9s1t2u3v4
acedifghqjk1mnop2rstu3b2345l7891v34667851924


Test case#23
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9s1t2u3v4w5
abcde3g4isf6m7h8qr5tk2l124njo6p918395172u3v4w5


Test case#24
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9s1t2u3v4w5x6
aiq193bjr2f6c7s821d1k4l3emn546p7v859got2u3h4w5x6


Test case#25
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9s1t2u3v4w5x6y7
acegikm4qsuwy2h6813572246bdfojlnprt9x13579v4681357


Test case#26
a1b2c3d4e5f6g7h8i9j1k2l3m4n5o6p7q8r9s1t2u3v4w5x6y7z8
abcge3m4ijf6ynhpq9s1kvl3541do65778r921t2u384w5x627z8