#include "math.h"{int getIndexFromShellArray(int i, int j, int[] A){ int k; if (i < j) { k = pow(max(i, j) + 1, 2); k -= i; } else if (i < j) { k = pow(max(i, j)) + 1; k += j; } else k = pow(i + 1, 2) - i; return A[k];}int max(int x, int y){ return (x >= y) ? x : y;}
#include "stdio.h"#include "math.h"char* getIndexesFromNumber(int k){ int i, j; i = j = 0; char[50] indexes; while (1) { int upper_bound = pow((j+1), 2); int lower_bound = pow(j, 2) + 1; if (upper_bound > k) { int corner = upper_bound - (upper_bound - lower_bound) / 2; if (k > corner) { i = higherSquare - k; sprintf(indexes, "(%d, %d)", i, j); return indexes; } else if (k < corner) { j = k - lowerSquare; sprintf(indexes, "(%d, %d), i, j); return indexes; } else { i = j; sprintf(indexes, "(%d, %d), i, j); return indexes; } } else if (upper_bound == k) { sprintf(indexes, "(%d, %d), 0, j); return indexes; } else { ++i; ++j; } }}