Sunday, August 14, 2011

Problem 24

prob24.c Problem 24
Filename: prob24.c
/*A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:
 *
 *012   021   102   120   201   210
 *
 *What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
 */
#include <stdio.h>

#define MAX_VAL 10

void printVector(const int *v)
{
  int i;
  for(i=0; i< MAX_VAL; ++i)
    {
      printf("%d", v[i]);
    }
  printf("\n");
}


int main()
{
  int w[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  int i, j, k, l, temp;
  
  for(i=1; i<1000000; ++i)
    {
      for(j=MAX_VAL-2; j>=0; --j)
	{
	  
	  if(w[j] < w[j+1])
	    {
	      for(l=MAX_VAL-1; l>=0; --l)
		{
		  if(w[j] < w[l])
		    {
		      temp = w[j];
		      w[j] = w[l];
		      w[l] = temp;
		      break;
		    }
		}							
	      
	      for(k=j+1; k<MAX_VAL-((MAX_VAL-(j+1))/2); ++k)
		{
		  temp = w[k];
		  w[k] = w[MAX_VAL-(k-j)];
		  w[MAX_VAL-(k-j)] = temp;
		}
	      break;
	    }
	}
      
    }
  printVector(w);					
  return 0;
}



syntax highlighted by Code2HTML, v. 0.9.1

No comments:

Post a Comment