чтобы найти, какое число повторяется - PullRequest
4 голосов
/ 23 декабря 2010

в массиве [10], в массиве есть числа от 1 до 9, и одно из чисел повторяется (повторное число также между 1 и 9), как найти повторное число без использования цикла, и массивможно пройти только один раз сверху вниз.

это не домашняя работа, об этом спрашивали в интервью

Ответы [ 6 ]

8 голосов
/ 23 декабря 2010

Самый короткий ответ должен основываться на ответе Владимира. Цикл for отсутствует, однако он также не может быть расширен до массивов переменного размера. Это:

int repeated_number = array[9]+array[8]+array[7]+array[6]+array[5]
                     +array[4]+array[3]+array[2]+array[1]+array[0]-45;

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

7 голосов
/ 23 декабря 2010
int sum = 0;
for (int i = 9; i >= 0; --i)
    sum+=array[i];
int repeatedNumber = sum - 45; // 45 = 1+...+9

Это решение использует цикл, но ваше условие противоречиво - массив обхода подразумевает, что цикл используется

3 голосов
/ 23 декабря 2010

Сделать массив из 10 бул.Каждый бул представляет собой свой соответствующий номер.Если вы нашли bool при написании true, число повторяется.

0 голосов
/ 23 декабря 2010

Попробуйте использовать логический массив, чтобы указать, существует значение или нет. Используйте true, чтобы указать, что номер существует.

int main(void)
{
  const unsigned int array_values[10] = {1, 2, 3, 3, 4, 5, 6, 7, 8, 9};
  bool               is_resident[10] = {false};
  bool               duplicate = false;
  unsigned int       index = 0;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  duplicate = duplicate || is_resident[array[index]];
  is_resident[array[index++]] = true;
  std::cout << "Duplicate found: " << (char *)(duplicate ? "true" : "false") << std::endl;
  return 0;
}

Приведенный выше код не проверен и не специализирован для этого вопроса. Этот код не имеет других целей в жизни и не обобщается.

Примечание. В этом примере петли не использовались и не наносились.
«Всегда существует третий вариант». - Томас Мэтьюз

0 голосов
/ 23 декабря 2010

Мне тоже скучно. Вот решение, использующее трюк с рекурсией и Владимиром:

int find_dupe(int* array, int len)
{
    static int sum = 0;
    sum += array[0];

    if(len == 1)
        return sum - 45;

    return find_dupe(array+1, len-1);
}

int main()
{
    int array[10] = { 9, 2, 5, 8, 6, 7, 1, 3, 4, 2 };

    printf("dupe: %i\n", find_dupe(array, 10));

    return 0;
}
0 голосов
/ 23 декабря 2010

Решение, которое я даю, от CommanderZ, но единственное отличие состоит в том, что мне было скучно, и я не хочу учиться, поэтому вместо этого я сделал код.

int FindDuplicate(int index)
{
    static bool initialized = false;
    static bool Existance[10];
    if(!initialized)
    {
        for (int i = 0 ; i < 10 ; i++)
            Existance[i] = false;
        initialized = true;
    }

    if(index == -1)
        return 0;

    if(Array[index] == true)
        return index;
    else
        Array[index] = true;

    return FindDuplicate(index - 1); //edit-fix

}

Также см. Эту ветку, которая может быть немного похожа: При наличии массива с несколькими повторяющимися записями, найти одну повторную запись O (N) время и постоянное пространство

И этот тоже: Массив Домашнее задание Вопрос

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