Найти числа, что сумма первой и второй цифр в их записи равна сумме третей и четвертой - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Помогите решить задачку на языке C можно еще на Паскале. На интервале (1000 - 9999) найти все простые числа, каждое из которых обладает тем свойством, что сумма первой и второй цифр в записи этого числа равна сумме третей и четвертой. Заранее спасибо.

Решение задачи: «Найти числа, что сумма первой и второй цифр в их записи равна сумме третей и четвертой»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void fillArr(char *message, int *arr, int n);
 
int main(void)
{
   int n, m, i, j, k;
   printf("size first array: ");
   scanf("%i",&n);
   printf("size second array: ");
   scanf("%i",&m);
 
   int *arr1 = calloc(n, sizeof(int));
   int *arr2 = calloc(m, sizeof(int));
   int arr[n+m];
 
   fillArr("first", arr1, n);
   fillArr("second", arr2, m);
 
   for (i=0, j=n-1, k=0; i<n+m; ++i)
   {
      if (j>=0)
      {
         if (k<m && (arr1[j]<arr2[k]))
            arr[i] = arr1[j--];
         else if (k<m)
            arr[i] = arr2[k++];
         else
            arr[i] = arr1[j--];
      }
      else if (k<m)
         arr[i] = arr2[k++];
   }
 
   for (i=n-1; i>=0; --i)
      printf("%i ", arr1[i]);
   printf("\n");
   for (i=0; i<m; ++i)
      printf("%i ", arr2[i]);
   printf("\n");
   for (i=0; i<n+m; ++i)
      printf("%i ", arr[i]);
   printf("\n");
 
 
   return 0;
}
 
void fillArr(char *message, int *arr, int n)
{
   int i;
   for (i=0; i<n; ++i)
   {
      printf("%s array[%i] = ", message, i);
      scanf("%i", &arr[i]);
   }
}

Объяснение кода листинга программы

  1. В начале программы подключаются две стандартные библиотеки C: stdio.h и stdlib.h.
  2. Далее определены две функции: fillArr и main.
  3. В функции main создаются и инициализируются переменные: n, m, i, j, k. Переменная n используется для хранения размера первого массива, а переменная m - для размера второго массива.
  4. Затем происходит запрос на ввод размеров массивов и сохранение этих размеров в переменных n и m соответственно.
  5. Далее создаются два массива: первый массив arr1 динамически выделяется с помощью функции calloc, а второй массив arr2 также динамически выделяется с помощью функции calloc. Третий массив arr создается для хранения результатов. Его размер определяется как сумма размеров первого и второго массивов.
  6. После этого вызывается функция fillArr для заполнения первого и второго массивов. Эта функция принимает три параметра: message, arr и n. message указывает, какой массив мы заполняем, arr - это указатель на массив, а n - это размер массива.
  7. Затем происходит цикл, который начинается с i=0, j=n-1 и k=0. Он выполняется до тех пор, пока i меньше или равно сумме размеров массивов n и m.
  8. Внутри цикла происходит проверка условия, и если оно выполняется, то значение arr[i] присваивается значению arr1[j] или arr2[k], в зависимости от того, какое из них меньше. Затем j уменьшается на 1, а k увеличивается на 1. Если условие не выполняется, то k увеличивается на 1. Если j меньше или равно 0, то k увеличивается на 1. Если k меньше или равно m, то arr[i] присваивается значение arr2[k]. Если k больше m, то arr[i] присваивается значение arr1[j]. Если j меньше или равно 0, то arr[i] присваивается значение arr1[j].
  9. После завершения цикла происходит вывод на экран значений первого массива, второго массива и результата.
  10. В конце программы функция main возвращает 0.
  11. Функция fillArr выводит сообщение, запрашивает значение и сохраняет его в массиве.
  12. В конце функции fillArr возвращается 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы