C   73

odd

Guest on 2nd July 2022 04:36:56 PM

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5.  
  6.  
  7. int size;
  8. char option;
  9.  
  10. int main (int argc, char *argv[])
  11. {
  12.     int small = 0, large = 0, max, i, j, number = -1, count = 0;
  13.     int *results, *test, full = 0;
  14.     int *freq, zeroes = 1;
  15.    
  16.     float elapsed;
  17.  
  18.     if( argc < 2 )
  19.         printf("\nDefault: one line of zeroes until termination\n\n");
  20.     else if( atoi(argv[1]) == 0 )
  21.         printf("\nDefault: one line of zeroes until termination\n\n");
  22.     else
  23.         zeroes = atoi( argv[1] );
  24.  
  25.     printf("Please enter the number of vertices (print Y/N):  ");
  26.     scanf("%d\n %c", &size, &option);
  27.  
  28.     option = toupper(option);
  29.  
  30.  
  31.  
  32.     small = (int)pow(2,size);
  33.     max = small*zeroes;
  34.     results = (int *)calloc( small, sizeof(int));
  35.     freq = (int *)calloc( max, sizeof(int));
  36.     test = (int *)calloc(size, sizeof(int));
  37.     clearArray(test);
  38.     test[size-1] = 1;
  39.     for( i = 0; i < small; i++ )
  40.     {
  41.         results[i] = 0;
  42.         freq[i] = 0;
  43.     }
  44.     for( ; i < max; i++ )
  45.         freq[i] = 0;
  46.  
  47.     while(!full)
  48.     {
  49.         full = increment( test, &number );
  50.         results[number] = countOdd(test, zeroes);
  51.         freq[results[number]]++;
  52. //      if( results[number]  < small )
  53. //          small = results[number];
  54.         if( results[number]  > large )
  55.             large = results[number];
  56. //      if(results[number] == zeroes)
  57. //          printf("\nvalue: %d\n", number);
  58.     } //end for
  59.  
  60.    
  61.  
  62.     printf("\tGraphs of size %d:\n", size);
  63.  
  64.     for( i = 0, j = 1; i < max; i++ )
  65.     {
  66. /*      if( (results[i] != 0)  && (results[i] < large) )
  67.         {
  68.             printf("%7d: %3d ", i, results[i]);
  69.             j++;
  70.         }
  71.         if( (j%7) == 0 )
  72.         {
  73.             printf("\n");
  74.             j++;
  75.         }
  76. */      if(results[i] == large)
  77.             count++;
  78.     }    
  79.         printf("\n");
  80.         printf("\tNumber with max value (%d): %d\n",large, count);
  81.        
  82.         printf("\n FREQUENCY TABLE [value : frequency]\n\n");
  83.         for( i = 1, j = 1; i < max; i++ )
  84.         {
  85.             if( freq[i] != 0 )
  86.             {
  87.                 printf("%5d: %-3d", i, freq[i] );
  88.                 j++;
  89.             }
  90.             if( (j % 6) == 0 )
  91.             {
  92.                 printf("\n");
  93.                 j++;
  94.             }
  95.         }
  96. //      if( zeroes != 1 )
  97.             printf("\n\n    *** Line of 0's terminated after %d lines\n",
  98.                 results[0]);
  99.         printf("\n\n");
  100.         printf("=============================================\n \n \n");
  101.  
  102. }//end main
  103.  
  104. //============================ count.c ==================================
  105.  
  106. int countOdd(int *array, int zeroes)
  107. {
  108.     int number = 0;
  109.     static int beginning = 0;
  110.     int test = 0, i = 0, n = 0;
  111.     int found = 0, full = 0, reset = 0;
  112.     int max =  (int) pow(2,size);
  113.     int *one, *two, *curr;
  114.    
  115.     one = (int *)calloc(size, sizeof(int));
  116.     two = (int *)calloc(size, sizeof(int));
  117.     curr = (int *)calloc(size, sizeof(int));
  118.  
  119.     i = clearArray(one);
  120.     i= clearArray(curr);
  121.  
  122.     for( i = 0; i < size; i++ )
  123.         two[i] = array[i];
  124.     if( option == 'Y')  
  125.     {
  126.         printf("\n    ");
  127.         for( i = 0; i < size; i++ )
  128.             printf("%d ", i);
  129.  
  130.         printf("\n\n0   ");
  131.         for( i = 0; i < size; i++ )
  132.             if( array[i] == 1 )
  133.                 printf("x ");
  134.             else
  135.                 printf("o ");
  136.         printf("\n");
  137.     }
  138.  
  139.     for( number = 0; (found < zeroes) && (number < max); number++ )
  140.     {
  141.         test = 0;
  142.         n = 0;
  143.         found++;
  144.  
  145.         for( i = 0; i < size; i++ )
  146.         {
  147.             test = 0;
  148.             if( i > 0 )
  149.                 test += two[i-1];
  150.  
  151.             test += one[i];
  152.  
  153.             if( i < (size-1) )
  154.                 test += two[i+1];
  155.  
  156.             if( (test % 2) == 1 )
  157.                 curr[i] = 0;
  158.             else
  159.                 curr[i] = 1;
  160.         }
  161.  
  162.         for( i = 0; i < size; i++ )
  163.             if( curr[i] == 1 )
  164.                 n++;
  165.  
  166.         if( n != 0 )
  167.             found--;
  168.         if( n == 0 )
  169.         {
  170.             reset += number;
  171.             number = 0;
  172.         }
  173.     if( option == 'Y')
  174.     {
  175.         printf("%-2d  ", reset+number+1);
  176.         for( i = 0; i < size; i++ )
  177.         if( curr[i] == 1 )        
  178.             printf("x ");
  179.         else
  180.             printf("o ");
  181.         printf("\n");
  182.     }
  183.         for( i = 0; i < size; i++ )
  184.             one[i] = two[i];
  185.         for( i = 0; i < size; i++ )
  186.             two[i] = curr[i];
  187.         for( i = 0; i < size; i++ )
  188.             curr[i] = 0;
  189.  
  190.     } //end for
  191.     if( option == 'Y' )
  192.         printf("\n");
  193.  
  194.     beginning++;
  195.     if( number >= max)
  196.         return 0;
  197.  
  198.     return (reset+number);
  199. }
  200.  
  201. //============== increment ================
  202.  
  203. int increment( int *array, int *number)
  204. {
  205.     int i = 0;
  206.     int count = 0;
  207.     int temp = *number + 1;
  208.  
  209.     *number = *number + 1;
  210.    
  211.     for( i = (size - 1); i >= 0; i-- )
  212.     {
  213.         array[i] = temp % 2;
  214.         temp = temp / 2;
  215.     } //end for
  216.    
  217.     for( i = 0; i < size ; i++ )
  218.         if( array[i] == 1)
  219.             count++;
  220.  
  221.     if( count == size )
  222.         return 1;    
  223.     return 0;
  224. }
  225.  
  226. //=================== clearArray =================
  227.  
  228. int clearArray(int *array)
  229. {
  230.     int i = 0;
  231.  
  232.     for(i = 0; i < size; i++)
  233.         array[i] = 0;
  234.  
  235.     return i;
  236. }

Raw Paste


Login or Register to edit or fork this paste. It's free.