number producing algorithm

Derek R. Foster dfoster at jarthur.Claremont.EDU
Sat Apr 14 18:20:16 AEST 1990

In article <19416 at boulder.Colorado.EDU> baileyc at tramp.Colorado.EDU (BAILEY CHRISTOPHER R) writes:
>Help!  I need an algorithm to generate a series of numbers.  This series is
>of variable length.  For example, if I pass a 10 to the function, it needs
>to generate numbers that have 10 digits.  The catch is that the numbers it
>generates can not have more than one of the same digit, so say, the passed
>number is 3, it would generate the following:
>0 1 2
>0 2 1
>1 0 2
>1 2 0
>2 0 1
>2 1 0
>So, basically, there are n! number of combinations/permutations (whichever
>it is).  Also, I would like it to start with 0 1 2 ... 

This was a fun one to do. I like little challenges like this; they're
a like crossword puzzles. I found a reasonably nice solution to it.
It seems to work OK, although you might be able to eliminate the
recursion with a little massaging.
Try this:

#include <stdio.h>

void recurse(int *numlist, int num, int maxnum)
  int i,j,norepeats;

  if (num >= maxnum)
    for (j=0; j<maxnum; j++)
      printf("%d ", numlist[j]);
    for (i=0; i<maxnum; i++)
      for (j=0,norepeats=1; j<num && (norepeats=(numlist[j] != i)); j++);
      if (norepeats)
        numlist[num] = i;
        recurse(numlist, num+1, maxnum);

void generatelist(int num)
  int * numlist;

  numlist = (int *) malloc(sizeof(int) * num);

  recurse(numlist, 0, num);


void main(void)
  int num;

  printf("Enter number?");
  scanf("%d", &num);

I hope this is what you wanted!

Derek Riippa Foster

More information about the Comp.lang.c mailing list