home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / vrac / tpchal_1.zip / RF.C < prev    next >
C/C++ Source or Header  |  1994-06-01  |  2KB  |  78 lines

  1. /*
  2. **  Robin Forster (1:163/107)
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <dos.h>
  9.  
  10. char answer[10];
  11. char initnumber[10]={' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '\0' };
  12. int  used[9];
  13.  
  14. int test(char *number, int n)
  15. {
  16.       /* We don't need to save it.  We're always once step behind */
  17.  
  18.       number[n]='\0';
  19.       return !(atol(number)%n);
  20. }
  21.  
  22. int findindex(char *number, int index)
  23. {
  24.       char p[10];
  25.       char digit, init = '2';
  26.  
  27.       strcpy(p,number);
  28.  
  29.       if (index & 1)                      /* if odd start at odd digit */
  30.             init = '1';
  31.  
  32.       /* for each odd/even digit */
  33.  
  34.       for (digit = init; digit <= '9'; digit += 2)
  35.       {
  36.             if (!used[digit - '1'])
  37.             {
  38.                   p[index - 1]=digit;
  39.                   if (test(p, index))
  40.                   {
  41.                         if (index != 9)
  42.                         {
  43.                               used[digit - '1'] = 1;
  44.                               if (findindex(p, index + 1))  /* recurse */
  45.                                     return 1;
  46.                               else  used[digit - '1']=0;
  47.                         }
  48.                         else
  49.                         {
  50.                               strcpy(answer, p);            /* found it */
  51.                               return 1;
  52.                         }
  53.                   }
  54.             }
  55.       }
  56.       return 0;
  57.  
  58. }
  59.  
  60. int main()
  61. {
  62.       int i;
  63.       unsigned long ticks;
  64.       unsigned long far *timer;
  65.  
  66.       timer = MK_FP(0x40,0x6C);
  67.  
  68.       ticks = *timer;
  69.       for (i = 0; i < 1000; i++)
  70.       {
  71.             memset(used, 0, sizeof(used));
  72.             if(!findindex(initnumber, 1))
  73.                   puts("No such number!\n");
  74.       }
  75.       printf("Answer %s\n\nTime %lu\n", answer, *timer - ticks);
  76.       return 0;
  77. }
  78.