Please note, this is a STATIC archive of website www.w3resource.com from 19 Jul 2022, cach3.com does not collect or store any user information, there is no "phishing" involved.
w3resource

C Exercises: Get the kth permutation sequence from two given integers n and k

C Programming Mathematics: Exercise-5 with Solution

The following set contains a total of n! unique permutations
Set: [1, 2, 3, ..., n]
If n =3 we will get the following sequence:
1. "123"
2. "132"
3. "213"
4. "231"
5. "312"
6. "321"
Input: n = 3, k = 4
Output: "231"
Write a C program to get the kth permutation sequence from two given integers n and k where n is between 1 and 9 inclusive and k is between 1 and n! inclusive.

Example:
Input:
n = 3
int k = 2

n = 4
k = 7
Output:
Kth sequence: 132
Kth sequence: 2134

Sample Solution:

C Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int factorial_num(int n)
{
    if (n == 0) {
        return 0;
    } else if (n == 1) {
        return 1;
    } else {
        return n * factorial_num(n - 1);
    }
}

static char* get_Permutation(int n, int k)
{
    int i;
    int *permutation_sz = malloc(n * sizeof(int));
    for (i = 0; i < n; i++) {
        permutation_sz[i] = i + 1;
    }

    char *result = malloc(n + 1);
    for (i = 0; i < n; i++) {
        int fac = factorial_num(n - i - 1);
        int j = k > 1 ? (k - 1) / fac : 0;
        result[i] = permutation_sz[j] + '0';
        k -= j * fac;
        memmove(permutation_sz + j, permutation_sz + j + 1, (n - j) * sizeof(int));
    }
    result[n] = '\0';
    return result;
}

int main(void)
{
   int n = 3;
    int k = 2;
    printf("\nn = %d, k = %d  ", n, k);
    printf("\nKth sequence: %s ",get_Permutation(n, k));
    n = 4;
    k = 7;
    printf("\nn = %d, k = %d  ", n, k);
    printf("\nKth sequence: %s ",get_Permutation(n, k));
    return 0;
}

Sample Output:

n = 3, k = 2  
Kth sequence: 132 
n = 4, k = 7  
Kth sequence: 2134 

Flowchart:

Flowchart: Get the kth permutation sequence from two given integers n and k.

C Programming Code Editor:

Improve this sample solution and post your code through Disqus.

Previous: Write a C program to calculate x raised to the power n(xn).
Next: Write a C program to check if a given string can be interpreted as a decimal number.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



C Programming: Tips of the Day

Static variable inside of a function in C

The scope of variable is where the variable name can be seen. Here, x is visible only inside function foo().

The lifetime of a variable is the period over which it exists. If x were defined without the keyword static, the lifetime would be from the entry into foo() to the return from foo(); so it would be re-initialized to 5 on every call.

The keyword static acts to extend the lifetime of a variable to the lifetime of the programme; e.g. initialization occurs once and once only and then the variable retains its value - whatever it has come to be - over all future calls to foo().

Ref : https://bit.ly/3fOq7XP