給定一個NxN矩陣,我想對其右上角三角形進行線性索引。 遵循一個對角線的模式,從主對角線之后開始。
例如,給定一個4x4矩陣
X 0 3 5
X X 1 4
X X X 2
X X X X
我在尋找一個非遞回(封閉形式)的函式,將0到5的線性指數映射到(x,y),以達到
f(0) = (0, 1)
f(1) = (1, 2)
f(2) = (2, 3)
f(3) = (0, 2)
f(4) = (1, 3)
f(5) = (0, 3)
逐行運行的相關情況:
uj5u.com熱心網友回復:
我為你給的陣列和值創建了一個自定義方法。
int a[4][4] ={{1, 0, 3, 5}, {1, 1, 1, 4}, {1, 1, 1, 2}, {-1, -1, -1, -1}}。
代碼完全是這樣的。你給陣列 而無論你給Func方法中的第二個值是什么,對角線上的值的索引都會到達你那里。
#include <iostream>
使用 命名空間 std.com.cn>。
int b[2] ={-1,-1}。
int Func(int a[4][4] 。 int n)
{
for(int i =0; i<4; i )
{
for(int j=0; j<4; j )
{
if(a[i][j]==n)
{
if(i<j)
{
b[0]=i;
b[1]=j;
return 0。
}
}
}
}
}
int main()
{
int a[4][4] ={{1, 0, 3, 5}, {1, 1, 1, 4}, {-1, -1, -1, 2}, {-1, -1, -1, -1}。
Func(a,5)。
for(int i=0; i<2; i )
{
cout<<b[i]<<" "/span>。
}
return 0;
感謝你USEFUL的反饋,如果它對你有用的話
uj5u.com熱心網友回復:
也許有人能想出一個不需要回圈的數學公式,但在那之前我想出了一個O(N)解決方案:
#include <utility>
constexpr std:: pair<int, int> f(int n, int idx)
{
int group_size = n - 1;
int rest = idx 1;
while (rest > group_size)
{
rest = rest - group_size;
--group_size。
}
return {(rest - 1) % group_size,
n - group_size (rest - 1) % group_size};
}
/* 3x3
X 0 2
X X 1
X X X
*/
static_assert(f(3, 0) == std: :pair{0, 1})。)
static_assert(f(3, 1) == std: :pair{1, 2})。)
static_assert(f(3, 2) == std: :pair{0, 2})。)
//4x4
static_assert(f(4, 0) == std: :pair{0, 1})。)
static_assert(f(4, 1) == std: :pair{1, 2})。)
static_assert(f(4, 2) == std: :pair{2, 3})。)
static_assert(f(4, 3) == std: :pair{0, 2})。)
static_assert(f(4, 4) == std: :pair{1, 3})。)
static_assert(f(4, 5) == std: :pair{0, 3})。)
/* 5x5
X 0 4 7 9
X X 1 5 8
X X X 2 6
X X X X 3
X X X X X
*/
static_assert(f(5, 0) == std: :pair{0, 1})。)
static_assert(f(5, 1) == std: :pair{1, 2})。)
static_assert(f(5, 2) == std: :pair{2, 3})。)
static_assert(f(5, 3) == std: :pair{3, 4})。)
static_assert(f(5, 4) == std: :pair{0, 2})。)
static_assert(f(5, 5) == std: :pair{1, 3})。)
static_assert(f(5, 6) == std: :pair{2, 4})。)
static_assert(f(5, 7) == std: :pair{0, 3})。)
static_assert(f(5, 8) == std: :pair{1, 4})。)
static_assert(f(5, 9) == std: :pair{0, 4})。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/333962.html
標籤:
下一篇:永久地改變DIV的背景顏色
