Hi Guys,
Here is the code to find the next permutation of given string. I used the algorithm mentioned by Career Cup and this is solution to IARCS.
So Here is the solution
Here is the code to find the next permutation of given string. I used the algorithm mentioned by Career Cup and this is solution to IARCS.
So Here is the solution
#include
void
nextPermutation(
char
a[],
int
size);
main()
{
int
Size;
int
length;
char
size[5];
char
string[2000];
//here just assuming that there can be 1000 digit number and there will be space in between 2 numbers
int
i=0;
int
j=0;
int
k =0;
int
temp = 0;
char
tempstring[1000];
//printf("Enter the size of array\n");
fgets
(size,5,stdin);
//printf("entered string is = %s\n",size);
Size = size[2] -
'0'
;
length = size[0] -
'0'
;
//printf("String length = %d and Size = %d\n",length,Size);
for
(i=0;i < Size; i++)
{
fgets
(string,2000,stdin);
j = k = 0;
while
(j<2000 amp="" code="" j="" string="">'\0'
)
2000>
{
if
(string[j] != 32)
{
tempstring[k] = string[j];
tempstring[++k] =
'\0'
;
}
++j;
}
//printf("So the number is = %s and the k = %d\n",tempstring,--k);
nextPermutation(tempstring,--k);
}
}
void
nextPermutation(
char
arr[],
int
length)
{
int
i=0;
int
temp = 0;
int
pos, maxpos;
pos = maxpos = -1;
for
(i=0; i
{
if
(arr[i] < arr[i+1])
{
pos = i;
}
}
if
(pos == -1)
{
printf
(
"No next Permutation exist\n"
);
return
;
}
for
(i=pos+1;i < length;i++)
{
if
(arr[pos] < arr[i])
maxpos = i;
}
//printf("pos = %d and maxpos = %d and length = %d\n",pos,maxpos,length);
//swap
temp = arr[pos];
arr[pos] = arr[maxpos];
arr[maxpos] = temp;
for
(i=pos+1;i
{
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
printf
(
"So the next string is \n"
);
for
(i=0;i
printf
(
"%d "
,arr[i]-
'0'
);
printf
(
"\n"
);
}
No comments:
Post a Comment