Положение элементов в векторе - PullRequest
1 голос
/ 27 февраля 2010

У меня есть несколько элементов в векторном типе, которые читаются из cin, а затем я выполняю некоторые вычисления над вектором, и его порядок элементов изменяется. Проблема в том, что мне нужно распечатать позиции векторных элементов после расчетов. Я не знаю, как это хорошо объяснить, поэтому приведу пример:

10 1 100 1000

и 10 - 1-й элемент, 1 - 2-й, 100 - 3-й и т. Д. После вычислений вектор меняется на:

100 10 1 1000

поэтому я должен напечатать

3 1 2 4 

потому что 100 является третьим элементом ввода, 10 является первым и т. Д. И т. Д.

Я попытался с массивом [1000] (потому что на входе нет чисел больше 1000), но он не будет работать, потому что может быть несколько чисел с одинаковым значением, например:

10 10 10 100

и вывод может быть 1 2 3 4 или 2 3 1 4 или 3 1 2 4 и т. Д., Но здесь мне нужно вывести 1 2 3 4, потому что это «самый маленький».

Я пытался с массивом f[1001] и f[10] = 1, f[100] = 2, f[1] = 3 - если числа с входа 10 100 1. Но если есть несколько чисел с одинаковым значением, например 10 10 100, моя идея не работает. Пожалуйста, помогите мне любым возможным способом.

Ответы [ 3 ]

3 голосов
/ 27 февраля 2010

Похоже, вам нужно сохранить как значение, так и начальную позицию. Вы должны быть в состоянии сделать это с массивом структур:

struct UserInput
{
    unsigned int initialPosition;
    int userInputValue;
};

int main()
{
    userInput theUserInput[100];
    // increment a counter, starting at 1, and place it in 
    // "initialPosition" in the struct as user input is read
}

Остальное я оставлю на ваше усмотрение ... как это после домашней работы :) удачи.

1 голос
/ 27 февраля 2010
  • Используйте ассоциативный массив, если вы знаете, что это такое.
  • Используйте линейный поиск, чтобы определить индекс, если количество входов ограничено.
  • Попробуйте использовать log 10 (или strlen) для преобразования 1, 10, 100, 1000 и т. Д. В 0, 1, 2, 3 и т. Д.
0 голосов
/ 28 февраля 2010

Из вашего описания такой пример: 10 (3) 10 (2) 10 (1) 100 (4)

Мы должны вывести 1 2 3 4 вместо 3 2 1 4.

Так что я не думаю, что ваше требование - просто напечатать начальную позицию напрямую. Вы должны сделать последовательность позиций как можно меньше.

Вот мое решение:

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

Подробная реализация оставлена ​​вам, так как это домашнее задание.

...