Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. void swap(char *a,char *b)
  5. {
  6. if( *a == *b )
  7. return;
  8. *a^=*b;
  9. *b^=*a;
  10. *a^=*b;
  11. }
  12.  
  13. void rev(char *s,int l,int r)
  14. {
  15. while(l < r)
  16. swap(&s[l++], &s[r--]);
  17. }
  18.  
  19. int bsearch (char *s,int l,int r,int key)
  20. {
  21. int index = -1;
  22. while(l<=r)
  23. {
  24. int mid = l+(r-l)/2;
  25. if(s[mid]<=key)
  26. r=mid-1;
  27. else
  28. {
  29. l=mid+1;
  30. if(index = -1 || s[index]<=s[mid])
  31. index = mid;
  32. }
  33. }
  34. return index;
  35. }
  36.  
  37. int nextpermutation(char *s)
  38. {
  39. int len = strlen(s);
  40. int i=len-2;
  41. while(i>=0 && s[i]>=s[i+1])
  42. --i;
  43. if(i<0)
  44. return 0;
  45. else
  46. {
  47. int index=bsearch(s,i+1,len-1,s[i]);
  48. swap(&s[i],&s[index]);
  49. rev(s,i+1,len-1);
  50. return 1;
  51. }
  52. }
  53.  
  54. void sort(char *s){
  55. int i,j;
  56. char temp;
  57.  
  58. int n = strlen(s);
  59. for (i=0; i < n-1; i++)
  60. {
  61. for (j=i+1; j<n; j++)
  62. {
  63. if (s[i] > s[j])
  64. {
  65. temp = s[i];
  66. s[i] = s[j];
  67. s[j] = temp;
  68. }
  69. }
  70. }
  71. }
  72.  
  73. void print_reverse(char *s){
  74.  
  75. int n = strlen(s);
  76. int i;
  77. for(i = n-1; i >= 0; i--)
  78. printf("%c",s[i]);
  79.  
  80. }
  81.  
  82. void printPermutations(char *s, int len){
  83.  
  84. int i;
  85. int length = len/2 + 1;
  86. char s1[length];
  87. char mid;
  88.  
  89. for(i = 0; i < length -1; i++)
  90. s1[i] = s[i];
  91. s1[i] = '\0';
  92.  
  93. sort(s1);
  94.  
  95. int val = 1;
  96.  
  97. while(val != 0){
  98.  
  99. printf("%s",s1);
  100.  
  101. if(len % 2 != 0)
  102. printf("%c",s[len/2]);
  103.  
  104. print_reverse(s1);
  105. printf("\n");
  106.  
  107. val = nextpermutation(s1);
  108. }
  109.  
  110. }
  111.  
  112. int main ()
  113. {
  114. int n, len;
  115. char s[100];
  116. scanf("%d",&n);
  117.  
  118. while(n--){
  119.  
  120. scanf("%s",s);
  121. len = strlen(s);
  122.  
  123. printPermutations(s, len);
  124.  
  125. }
  126. return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement