Easy C проект, чтобы показать повторные цифры - PullRequest
0 голосов
/ 20 апреля 2011

У меня проблема с этим кодом .... Проект должен показать мне повторный номер во входном номере.Например:

$ ./a.out
Enter a number: 9893746595
Repeated: 9 5

Вот код:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{   
    int a[10], b[10] ;
    int n,t;
    printf("Enter a number: ");
    for(n=0; n<10;n++)
    {
        scanf("%d", &a[n]);
        n=t;
        a[n]=b[t];

    }
    for(n=0;n<10;n++)
    {
        for(t=n;t<10;t++)
        {
            if(a[n]=b[t])
            printf("%d", a[n]);
        }
    }
    return 0;
}

Ответы [ 5 ]

2 голосов
/ 20 апреля 2011

Ваш код поддельный. ; -)

Обычный подход здесь заключается в создании массива 10 int с, по одному для каждой цифры, и подсчете вхождений каждой цифры в предоставленный пользователем номер.

Существует идиоматический метод получения цифр числа num по одной: используйте num % 10 для получения последней цифры и num / 10 для получения номера без последней цифры. Тогда ваша программа может выглядеть примерно так:

int dcount[10] = {0};  // 10 ints, all initialized to 0

scanf("%d", &num);

while(num) {
        dcount[num % 10]++;   // increment dcount[i], where i is the last digit of num
        num /= 10;            // "remove" last digit from num
}

for (int i = 0; i < sizeof(dcount)/sizeof(dcount[0]); i++)
        printf("%d occured %d times\n", i, dcount[i]);

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

Надеюсь, это поможет.

2 голосов
/ 20 апреля 2011

if(a[n]=b[t]) присваивает b[t] a[n].

Скорее всего, вы хотите использовать if(a[n] == b[t]) для сравнения этих значений.

Хорошая идея компилировать с использованием -Wall -Wextra -Werror флагов, поэтому все предупреждения включены и обрабатываются как ошибки (поэтому вы не можете просто игнорировать их).С этими флагами компилятор будет кричать на вас за случайное назначение.

0 голосов
/ 20 апреля 2011
int main()
{
   int i, number, digitCount[10];

   // Before starting, set the digit count for each digit to 0
   for (i = 0; i < 10; i++)
   {
      digitCount[i] = 0;
   }

   // Store the entire number in one int
   printf("Enter a number: ");
   scanf("%d", &number);

   // Find the remainder of number / 10 in order to get the last digit
   // Divide number by 10 in order to remove that digit
   // Continue to peel off digits until you reach zero
   while (number != 0)
   {
      digitCount[number % 10]++;
      number /= 10;
   }

   // For each digit which is counted more than once, print it
   printf("Repeated: ");
   for (i = 0; i < 10; i++)
   {
      if (digitCount[i] > 1)
      {
         printf("%d ", digitCount[i]);
      }
   }

   return 0;
}
0 голосов
/ 20 апреля 2011

Возможно, вы захотите взглянуть на первый цикл for.t читается без записи.То же самое для b.И вы перезаписываете только что прочитанное в переменной a[n] с b[t].В условном выражении для if вы имели в виду ==, где записано =.

Если вы включите каждую опцию в вашем компиляторе для выдачи предупреждений и строгой проверки на соответствие стандартному языку, он поймал быэто.

0 голосов
/ 20 апреля 2011

Ваш код назначает t на n до инициализации t.

Это может вызвать проблемы.Я не полностью изучил остальную часть вашего кода, но вы должны начать с инициализации t перед его использованием.Если это все еще не работает, предоставьте информацию, например, что она делает или не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...