Хитрость в том, что индекс в массиве input является суммой индексов в массиве output .Например,
output[0][3] = output[1][2] = output[2][1] = output[3][0] = input[3]
Однако здесь есть две проблемы:
Сначала главная диагональ (сверху / слева внизу / справа) всегда является первым элементом входного массива.Это можно обработать как особый случай, проверив, равны ли выходные индексы.
Тогда возникает проблема с тем, что делать, если сумма output превышает максимально допустимую вход индекс.В этом случае индекс во входном массиве рассчитывается путем вычитания, как показано в приведенном ниже коде.
#define SIZE 4
int input[SIZE] = {0,1,2,3};
int output[SIZE][SIZE];
for (int row = 0; row < SIZE; row++)
for (int col = 0; col < SIZE; col++)
{
if (row == col) // special case for the main diagonal
output[row][col] = input[0];
else if (row + col < SIZE) // normal case for small indexes
output[row][col] = input[row+col];
else // special case for large indexes
output[row][col] = input[2*(SIZE-1) - (row + col)];
}