home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 15
/
CD_ASCQ_15_070894.iso
/
vrac
/
tpchal_1.zip
/
RBS_0.C2
< prev
next >
Wrap
Text File
|
1994-05-21
|
2KB
|
78 lines
#include <stdio.h>
#include <stdlib.h>
main()
{
long n, div;
int posn, I;
#ifdef TEST
for (I = 0; I < 200; ++I)
{
#endif
for (posn = 2, div = 10000000L; posn < 10; ++posn, div /= 10)
{
unsigned dig;
long x, permute(void);
n = permute();
if (0L != (x = ((n / div) % posn)))
{
n += (posn - x) * div;
n -= n % div;
posn = 1;
div = 100000000L;
continue;
}
}
#ifdef TEST
}
#endif
printf("Number = %lu\n", n);
return 0;
}
const char odds[] = "1379", evens[] = "2468";
long permute(void)
{
static char number[] = " 5 ";
static char *peven = NULL, *podd = NULL;
static unsigned eskip = 1, oskip = 1;
int i;
if (!peven)
peven = (char *)evens;
if (!podd)
podd = (char *)odds;
for (i = 0; i < 9; )
{
if (i & 1)
{
while (((peven += eskip) - (char *)evens) >= 4)
peven -= 4;
number[i++] = *peven;
}
else
{
while (((podd += oskip) - (char *)odds) >= 4)
podd -= 4;
number[i++] = *podd;
}
if (4 == i)
++i;
}
if (!(4 > ++eskip))
{
peven = (char *)evens;
eskip = 1;
if (!(4 > ++oskip))
{
podd = (char *)odds;
oskip = 1;
}
}
return atol(number);
}