Поиск цифры в числе,но не делением с остатком - C (СИ)

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

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

Есть ли возможность найти цифру в числовом элементе массива,кроме деления с остатком? Задача состоит в том,что в массиве из 35 элементов удалить все числа кратные 7 или содержащих ее в записи .Применяя цикл while,я обнуляю те элементы,которые содержат на конце цифру 7 и кратные.А вот как найти числа (наподобие 172,573,275,т.е.содержащих в десятках цифру 7).
#define _CRT_SECURE_NO_WARNINGS
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 35
 
int poisk_x(int *arr, int sz);
void input_array(int *A, int A_size);
void print_array(int *A, int A_size);
 
int main()
{
    int i;
    int A[N];
    srand(time(0));
    input_array(A, N);
    puts("\nDo:");
    print_array(A, N);
    for (i = N - 1; i != 0; --i) {
        while (A[i] % 7 == 0|| A[i] % 10 == 7 )
        {
            int tmp = A[i];
            A[i] = 0;
            break;
        }
    }
    puts("\nPosle:");
    print_array(A, N);
    getchar();
    return 0;

}
//int poisk_x(int *arr, int sz)
//{
//  int i = 0;
//  int idx = i;
//  for (i = 1; i<sz; ++i) {
//      if (arr[idx] % 7 == 0)
//          idx == 0;
//  }
//  return idx;
//}

void input_array(int *A, int A_size)
{
    int i;
        for (i = 0; i<A_size; i++)
    {
        A[i] = 17 + rand() % (100-10); //генерируем массив
    }
}
 
void print_array(int *A, int A_size)
{
    for (int i = 0; i<A_size; i++)
    {
        printf("%4d", A[i]);
        //printf("\n");
    }
    puts("");
}
Ответа не будет?(((
Вот заменил все интересующие меня числа на ноль,как будет правильнее вывести новый массив уже без этих 0?
#define _CRT_SECURE_NO_WARNINGS
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 35
 
int poisk_x(int *arr, int sz);
void input_array(int *A, int A_size);
void print_array(int *A, int A_size);
 
int main()
{
    int y = 10;
    int i;
    int A[N];
    srand(time(0));
    input_array(A, N);
    puts("\nDo:");
    print_array(A, N);
    for (i = N - 1; i != 0; --i) {
        while (A[i] % 7 == 0|| A[i] % 10 == 7||A[i]/y==7)
        {
            int tmp = A[i];
            A[i] = 0;
            break;
        }
    }
    puts("\nPosle:");
    print_array(A, N);
    getchar();
    return 0;

}

void input_array(int *A, int A_size)
{
    int i;
        for (i = 0; i<A_size; i++)
    {
        A[i] = 17 + rand() % (100-10); //генерируем массив
    }
}
 
void print_array(int *A, int A_size)
{
    for (int i = 0; i<A_size; i++)
    {
        printf("%4d", A[i]);
        //printf("\n");
    }
    puts("");
}

Решение задачи: «Поиск цифры в числе,но не делением с остатком»

textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define N 35
 
void input_array(int *A, int A_size);
void print_array(int *A, int A_size);
 
/*ЭТО КОСТЫЛЬ ДЛЯ ФУНКЦИИ ИТОА, КОТОРОЙ НЕТ В ЛИНУКСЕ*/
 
 /* reverse:  переворачиваем строку s на месте */
 void reverse(char s[])
 {
     int i, j;
     char c;
 
     for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
         c = s[i];
         s[i] = s[j];
         s[j] = c;
     }
 }
 /*ЭТО КОСТЫЛЬ ДЛЯ ФУНКЦИИ ИТОА, КОТОРОЙ НЕТ В ЛИНУКСЕ*/
 void itoa(int n, char s[])
 {
     int i, sign;
 
     if ((sign = n) < 0)  /* записываем знак */
         n = -n;          /* делаем n положительным числом */
     i = 0;
     do {       /* генерируем цифры в обратном порядке */
         s[i++] = n % 10 + '0';   /* берем следующую цифру */
     } while ((n /= 10) > 0);     /* удаляем */
     if (sign < 0)
         s[i++] = '-';
     s[i] = '\0';
     reverse(s);
 }
 
 
/*ЗДЕСЬ ПРОГРАММА*/
int main()
{
    char *ach;
    char p[17];
    int y = 10;
    int i,X=0;
    int A[N];
    srand(time(0));
    input_array(A, N);
    puts("\nDo:");
    print_array(A, N);
    for (i = N - 1; i != 0; --i) {
        while (A[i] % 7 == 0|| A[i] % 10 == 7||A[i]/y==7)
        {
            int tmp = A[i];
            A[i] = 0;
            X++;
            break;
        }
    }
 
    int b_size = N;
 
 // Выделение памяти под новый массив и его заполнение
    int * b = (int *)malloc(sizeof(int) * b_size);
    for (i = b_size - 1; i != 0; --i) { //тоже с конца прогоняем по
           while (A[i] !=0)  //условию,что элемент не равен 0
        {
            b[i] = A[i];//то элемент второго массива равен элементу первого
            break;
        }
 
    }
    puts("\nPosle:");
    
 
       //здесь кусочек добавим с итоа;
    while(i<sizeof(A))//цикл пока i менее длины массива
    {
        if(A[i]!=0)//если член массива не равен нулю
    itoa (A[i], p);//преобразуем член массива в строку и пишем его в строку p
    if(strchr(p,'7')!=NULL){//если функция strchr не возвращает NULL (Т.е. цифра 7 есть в строке
      A[i]=0;// присваиваем этому члену значение 0, а нули у нас отсекаются на печати.
    
    }
     i++;
    }
    
    
    print_array(A,b_size);
    getchar();
    return 0;
 
 
}
 
 
void input_array(int *A, int A_size)
{
    int i;
        for (i = 0; i<A_size; i++)
    {
        A[i] = 17 + rand() % (100-10); //генерируем массив
    }
}
 
/*ЗДЕСЬ ЦИКЛ WHILE ВМЕСТО FOR */ 
void print_array(int *A, int A_size)
{
    int i=0;
    while(i<A_size)
    {
        if(A[i]!=0)
        printf("%4d", A[i]);
        //printf("\n");
        i++;
    }
    puts("");
}

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

  1. Объединение кода, который обращается к функциям, в единый блок.
  2. Создание нового массива b, размер которого совпадает с размером исходного массива A.
  3. Заполнение нового массива b значениями из исходного массива A.
  4. Присваивание значения 0 элементам исходного массива A, которые содержат цифру 7.
  5. Преобразование каждого ненулевого элемента исходного массива A в строку и проверка наличия цифры 7 в этой строке.
  6. Увеличение размера нового массива b до значения N.
  7. Вывод на экран исходного массива A и нового массива b.
  8. Ввод исходных данных с клавиатуры.
  9. Генерация случайных чисел для заполнения исходного массива A.
  10. Реализация функции reverse для переворачивания строки.
  11. Реализация функции itoa для преобразования целого числа в строку.
  12. Выделение памяти под новый массив b.
  13. Проверка наличия цифры 7 в строке, представляющей элемент исходного массива A.
  14. Уменьшение значения i на 1 при каждой итерации цикла.
  15. Использование функции strchr для поиска цифры 7 в строке.
  16. Отображение каждого элемента нового массива b, размер которого совпадает с размером исходного массива A.
  17. Использование функции printf для отображения каждого ненулевого элемента исходного массива A.
  18. Использование функции getchar для ожидания нажатия клавиши.
  19. Возврат значения 0 в конце программы.
  20. Использование функции rand для генерации случайного числа.

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


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

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

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