Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.29 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[], 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.     int n;
  29.     char input[11];
  30.     int counter[10]={0};
  31.     if(scanf("%10s %d", input, &n)==1){};
  32.     int len=strlen(input);
  33.     int perm[len];
  34.     for (i=0; i<len; i++) {
  35.         perm[i]=input[i]-'0';
  36.         if ((perm[i] > 9) || (perm[i] < 0)) {
  37.             puts("bad input");
  38.             return 0;
  39.         }
  40.         counter [perm[i]]++;
  41.         if (counter [perm[i]] > 1){
  42.             puts("bad input");
  43.             return 0;
  44.         }
  45.     }
  46.     for (int i = 0; i < n; i++) {
  47.         if (!next_permutation(perm, len))  break;
  48.         for (int j = 0; j<len; j++)
  49.             printf("%d", perm[j]);
  50.         printf("\n");
  51.     }
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement