Включите флаг, когда цифры показывают дважды в числе - C - PullRequest
0 голосов
/ 26 декабря 2018

Без использования массива. Как мне поменять флаг с 1 на 0, если в числе есть одна и та же цифра дважды или более?

принять, как будто все оницелые числа, temp & temp2 - это одно и то же число, которое является четырехзначным числом

for(i = 0; i < 4; i++) //if a digits shows twice
{
    n = temp % 10;
    for(k = 0; k <= 6; k++)
    {
        if(n == temp2 % 10)
        {
            counter++;
        }
        temp2 /= 10;
    }
    temp /= 10;
    if(counter > 1)
    {
        flag = 0;
    }
    counter = 0;
}

В результате просто не работает .. что-то не работает

1 Ответ

0 голосов
/ 26 декабря 2018

Вы берете младшую цифру и проверяете, присутствует ли она в остальной части номера.Если он найден, все готово.Если он не найден, вы делите число на 10 и повторяете процесс.Пример:

 n = 123456789;
 step 1: Is 9 present in 12345678
 step 2: Is 8 present in 1234567
 step 3: Is 7 present in 123456
 .. and so on ..

Итак, сначала вы пишете функцию, которая может определить, содержит ли число конкретную цифру.Функция может выглядеть следующим образом:

int contains_digit(int number, int digit)
{
  while(number)
  {
    if ((number % 10) == digit) return 0;  // Return zero when found
    number /= 10;
  }
  return 1; // Return one if not found
}

Затем вы вызываете эту функцию для всех цифр исходного номера и проверяете цифру на число, деленное на 10. Например, если число 1234, вы вызываете функциюкак:

contains_digit(123, 4)
contains_digit(12, 3)
contains_digit(1, 2)

Это может быть что-то вроде:

int main( void )
{
  int n = 12434;
  int flag = 1;
  while(n && flag)
  {
    flag = contains_digit(n/10, n % 10);
    n /= 10;
  }

  printf("flag is %d\n", flag);
  return 0;
}
...