Untitled
unknown
c_cpp
4 years ago
917 B
11
Indexable
struct idx {
int j;
int i;
};
struct idx find_idx(int **arr, int n, int base_i, int base_j, int idx) {
if (n == 2) {
const struct idx rets[4] = { {0,0}, {0,1}, {1,1}, {1,0}};
struct idx ret = rets[idx];
ret.j += base_j;
ret.i += base_i;
return ret;
}
int qtr = floor(((float)idx / (n * n)) * 4);
if (qtr == 1 || qtr == 2)
base_i += n / 2;
if (qtr == 2 || qtr == 3)
base_j += n / 2;
return find_idx(arr, n / 2, base_i, base_j, idx % ((n * n) / 4));
}
int main (int argc ,char **argv) {
int arr[][4] = {
{0,1,4,5},
{3,2,7,6},
{0xc,0xd,8,9},
{0xf, 0xe, 0xb, 0xa},
};
int idx = atoi(argv[1]);
struct idx ret = find_idx(arr, 4, 0, 0, idx);
printf("%d %d\n", ret.j, ret.i);
}
Editor is loading...