Индексация группы чисел массива

211
26 октября 2018, 06:40

Массив:

float v[] = {
0.5, 0,5, 0.0,
1.0, 0.5, 0.0,
0.5, 0.5, 0.0,
-0.5, 0.5, 0.0,
1.0, 0.5, 0.0,
0.5, 0.5, 1.0,
0.5, 0.5, 1.0}

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

например: 0.5, 0.5, 0.0 - индекс ноль,

1.0, 0.5, 0.0 - индекс 1,

0.5, 0.5, 0.0 - индекс ноль(т.к. группа уже встречалась),

-0.5, 0.5, 0.0 - индекс 2,

1.0, 0.5, 0.0 - индекс 1,

0.5, 0.5, 1.0 - индекс 3 и т.д.

В итоге новый массив должен получится таким: int v2[] = {0, 1, 0, 2, 1, 3, 3}

Answer 1

Мне кажется задача простая, если поразмыслить мозгами

Вот код:

#include "iostream"
using namespace std;
template <typename T>
void OutputArray(const T *array) {
    int i = 0;
    while (array[i + 1] != *"exit") {
        cout << array[i] << " ";
        i++;
    }
    cout << endl;
}
int main()
{
//  Инициализация
    float arr0[] = {
        0.5, 0.5, 0.0,
        1.0, 0.5, 0.0,
        0.5, 0.5, 0.0,
        -0.5, 0.5, 0.0,
        1.0, 0.5, 0.0,
        0.5, 0.5, 1.0,
        0.5, 0.5, 1.0
    };
        int *arr1 = new int[8];
        for (int i = 0; i < 7; arr1[i] = -1, i++) {};
        int cnt = 0;
//  Реализация
        for (int i = 0; i < 21; i += 3) {
            if (arr1[int(i / 3)] == -1) {
                for (int j = i; j < 21; j += 3) {
                    if (arr0[i] == arr0[j] && arr0[i+1] == arr0[j+1] &&                                                    
                    arr0[i+2] == arr0[j+2]) {
                    arr1[int(j / 3)] = cnt;
                }
            }
        cnt++;
        }
    }
    arr1[8] = *"exit";
    OutputArray<int>((arr1)); // Чисто для красоты
//  Финализация
    delete arr1;
    system("pause");
    return 0;
}

Результат:

Алгоритм основан на том что если в массиве arr1 элемент обозначен как -1 то он не имеет индекса и мы во 2 цикле даем ему индекс. j не от 0. так как все элементы сзади уже проиндексированны. 1 элемент в массиве arr1 это общий индекс 3 элементов массива arr0. Надеюсь понятно.

READ ALSO
простое наследование JAVA

простое наследование JAVA

Суть проста, есть два класса: Main и Field

173
Внесение информации в базу данных и вытягивание оной из неё же

Внесение информации в базу данных и вытягивание оной из неё же

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

172
Изменение сцены при нажатии на кнопку меню JavaFX

Изменение сцены при нажатии на кнопку меню JavaFX

Мы пишем приложение на Java и перед нами стоит следующая задачаВ приложении есть пять разделов

156