поиск повторяющегося целого числа в массиве

#c #arrays #boolean

#c #массивы #логическое

Вопрос:

Привет, удалось проверить мою программу, если я повторил 8. Я также хочу распечатать, сколько повторяющихся 8 я сохранил в массиве.

 #include <stdio.h>
#include <stdbool.h>
int main(void)
{
    bool digit_seen[10] = {false};
    int digit=0;
    long n;

    printf("Enter number: ");
    scanf("%ld", amp;n);

    while (n>0)
    {
        digit = n % 10;
        if (digit_seen[digit])
        {
            break;
        }
        digit_seen[digit] = true;
        n/=10;
    }

    if (n>0 amp;amp; digit ==8)
    {
        printf("Repeated 8's");
    }
    else
    {
        printf("No 8's found");
    }
    return 0;
}
  

Комментарии:

1. Подсказка: вместо digit_seen[digit]=true , попробуйте digit_count[digit]

Ответ №1:

Если я понимаю вашу проблему, вы хотите знать количество случаев, когда 8 находится в вашем номере. Например, 88 имеет 2 8s. Если это так, я не понимаю, почему вы используете логический массив. Во-первых, вам нужен счетчик. Во-вторых, вам нужно знать, равна ли цифра 8 для каждой цифры, и увеличить этот счетчик, если это 8. Вот пример :

 #include <stdio.h>
#include <stdbool.h>
int main(void)
{
    int digit=0;
    long n;
    int counter = 0;

    printf("Enter number: ");
    scanf("%ld", amp;n);

    while (n>0)
    {
        digit = n % 10;
        if(digit == 8)
        {
            counter  ;
        }

        n/=10;
    }

    if (counter > 0)
    {
        printf("Repeated 8's");
    }
    else
    {
        printf("No 8's found");
    }
    return 0;
}
  

В этом примере счетчик будет иметь количество вхождений 8 в вашем номере. Просто отобразите его в printf, и все готово.

РЕДАКТИРОВАТЬ: вот решение с использованием массива:

 #include <stdio.h>

int main(void)
{
    int digit = 0;
    long n;
    int arrayNumber[10] = {0};

    printf("Enter number: ");
    scanf("%ld", amp;n);

    while (n>0)
    {
        digit = n % 10;
        arrayNumber[digit]  ;

        n /= 10;
    }

    if (arrayNumber[8] > 0)
    {
        printf("Repeated 8's");
    }
    else
    {
        printf("No 8's found");
    }
    return 0;
}
  

Таким образом, вы будете знать вхождение каждого числа от 0 до 9 в вашем целом числе. Я бы также отметил, что вам нужно определить, что такое повторяющееся число. Если это происходит, когда есть хотя бы 2 вхождения, вам нужно изменить arrayNumber[8] > 0 на arrayNumber[8] > 1

Комментарии:

1. есть ли способ решить это с помощью array? например, перебирать каждый элемент, чтобы проверить, есть ли 8, а затем распечатать все 8?

2. Вы хотите знать каждую позицию 8 в вашем числе? В противном случае, если вы печатаете только 8 секунд без какой-либо другой информации, добавьте printf в блок if, и все готово. Если вы хотите знать каждую позицию 8, я думаю, было бы лучше напечатать число в массиве символов. и выполните итерацию по нему с помощью цикла for .

3. В моем назначении конкретно не указано, что мне нужна позиция, но в нем указано, что мне нужно использовать array.

4. Я отредактировал свой пост в соответствии с информацией, которую вы мне дали

5. О, и обратите внимание, что это будет работать только для диапазона long, если ваш номер может содержать неограниченное количество цифр, я бы посоветовал вам использовать массив символов.