Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdbool.h>
  4.  
  5. void swap(int *a, int *b) {
  6. int temp = *a;
  7. *a = *b;
  8. *b = temp;
  9. }
  10.  
  11. bool next_permutation (int perm[], const int len) {
  12. for (int i = len - 2; i >= 0; --i) {
  13. if (perm[i] >= perm[i + 1]) continue;
  14. int min = i + 1;
  15. for (int j = i + 1; j < len; ++j)
  16. if (perm[j] < perm[min] && perm[j] > perm[i])
  17. min = j;
  18. swap (&perm[i], &perm[min]);
  19. for (int j = 1; j <= (len-i)/2; j++)
  20. swap (&perm[i + j], &perm[len - j]);
  21. return true;
  22. }
  23. return false;
  24. }
  25.  
  26. int main() {
  27. int i;
  28. long long int n;
  29. char input[11];
  30. int counter[10]={0};
  31. scanf("%10s %d", input, &n);
  32. int len=strlen(input);
  33. int perm[len];
  34. if(input==NULL) {
  35. puts("bad input");
  36. return -1;
  37. }
  38. for (i=0; i<len; i++) {
  39. if ((input[i] > '9') || (input[i] < '0')) {
  40. puts("bad input");
  41. return -1;
  42. }
  43. counter [input[i]]++;
  44. if (counter [input[i]] > 1){
  45. puts("bad input");
  46. return -1;
  47. }
  48. perm[i]=input[i];
  49. }
  50. for (int i = 0; i < n; i++) {
  51. if (!next_permutation(perm, len)) break;
  52. for (int j = 0; j<len; j++)
  53. printf("%d", perm[j]);
  54. printf("\n");
  55. }
  56. return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement