在数组中查找重复整数

时间:2016-10-08 17:25:39

标签: c arrays boolean

如果我重复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", &n);

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

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

1 个答案:

答案 0 :(得分:1)

如果我了解您的问题,您想知道您的号码中出现的数量是多少。像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", &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;
}

在此示例中,计数器的编号将出现8s。只需将它显示在printf中即可完成。

编辑:这是使用数组的解决方案:

#include <stdio.h>

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

    printf("Enter number: ");
    scanf("%ld", &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