Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdbool.h>
- void swap(int *a, int *b) {
- int temp = *a;
- *a = *b;
- *b = temp;
- }
- bool next_permutation (int perm[], const int len) {
- for (int i = len - 2; i >= 0; --i) {
- if (perm[i] >= perm[i + 1]) continue;
- int min = i + 1;
- for (int j = i + 1; j < len; ++j)
- if (perm[j] < perm[min] && perm[j] > perm[i])
- min = j;
- swap (&perm[i], &perm[min]);
- for (int j = 1; j <= (len-i)/2; j++)
- swap (&perm[i + j], &perm[len - j]);
- return true;
- }
- return false;
- }
- int main() {
- int i;
- long long int n;
- char input[11];
- int counter[10]={0};
- scanf("%10s %d", input, &n);
- int len=strlen(input);
- int perm[len];
- if(input==NULL) {
- puts("bad input");
- return -1;
- }
- for (i=0; i<len; i++) {
- if ((input[i] > '9') || (input[i] < '0')) {
- puts("bad input");
- return -1;
- }
- counter [input[i]]++;
- if (counter [input[i]] > 1){
- puts("bad input");
- return -1;
- }
- perm[i]=input[i];
- }
- for (int i = 0; i < n; i++) {
- if (!next_permutation(perm, len)) break;
- for (int j = 0; j<len; j++)
- printf("%d", perm[j]);
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement