Rejack

Home Exc. #1 - Find occurrences in range

Apr 5th, 2024
927
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int* numbersInRange(int a, int b, int k, int d, int * pSize);
  5. int countDigits(int num, int d);
  6.  
  7. int main()
  8. {
  9.     int a = 1, b = 100, k = 1, d = 3, size = 0;
  10.  
  11.     int* arr = numbersInRange(a, b, k, d, &size);
  12.  
  13.     if (arr == NULL)    // Allocation failed
  14.     {
  15.         printf("\nAllocation failed.\n\n");
  16.  
  17.         return 1;
  18.     }
  19.  
  20.     printf("\nThe number %d will appear exactly %d time%s in %d numbers from %d to %d\n\n", d, k, (k < 2) ? "" : "s", size, a, b);
  21.  
  22.     for (int i = 0; i < size; i++)
  23.         printf("%d%s ", arr[i], (i==size-1) ? "." : ",");
  24.  
  25.     printf("\n");
  26.  
  27.     free(arr);
  28.  
  29.     return 0;
  30. }
  31.  
  32. int* numbersInRange(int a, int b, int k, int d, int * pSize)
  33. {
  34.     int size = 0;
  35.  
  36.     for (int i = a; i <= b; i++)
  37.     {
  38.         if (countDigits(i, d) == k)
  39.             size++;
  40.     }
  41.  
  42.     int* ptr = (int*)malloc(size * sizeof(int));
  43.  
  44.     if (ptr == NULL)    // Allocation failed
  45.     {
  46.         *pSize = 0;
  47.  
  48.         return NULL;
  49.     }
  50.  
  51.     int z = 0;
  52.  
  53.     for (int i = a; i <= b; i++)
  54.     {
  55.         if (countDigits(i, d) == k)
  56.                 ptr[z++] = i;
  57.     }
  58.  
  59.     *pSize = size;
  60.  
  61.     return ptr;
  62. }
  63.  
  64. int countDigits(int num, int d)
  65. {
  66.     int count = 0;
  67.  
  68.     while (num != 0)
  69.     {
  70.         if (num % 10 == d)
  71.             count++;
  72.  
  73.         num /= 10;
  74.     }
  75.  
  76.     return count;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment