问题: 我需要生成以下序列。我有矩阵的顺序作为输入。
示例:
我需要生成其元素的位置序列。
(0,0),(0,1),(1,0),(1,1) ->for order 2
(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2) -> for order 3.
我需要具备为我这样做的功能。当我调用此函数时,它应该为我计算。我不想将序列存储在内存中。
例如:
first_call - > return value (0,0)
second_call to function - > return value ( 0,1)
...and so on...
您可以将这些值存储在某些全局变量中。
PS:
由于应用程序是多线程的,因此该函数必须是线程安全的。我知道这种情况没有区别。只是想传达整个问题。
精密:
我已经尝试过我的解决方案,但我认为它的效率很高。我正在寻找一种有效的方法来做到这一点。你可以提一下这些步骤。我不需要以任何特定语言实现。如果问题需要更多信息,请告诉我。
答案 0 :(得分:2)
使用全局变量存储调用函数的次数。称之为t
。如果订单是order
,那么
f =(t
div order
,t
mod order
)
其中div
是整数除法(例如5 div
3 = 1),mod
是模数(即除法的余数)。 (例如5 mod
3 = 2)。
所以在Java中例如:
public class MyCounter {
private static int t = 0;
public static int[] myFunction(int order) {
return new int[] { t / order , t++ % order };
}
public static void main(String[] args) {
int order = 3;
for(int i=0; i<order*order; i++) {
int[] k = myFunction(order);
System.out.println("("+k[0]+", "+k[1]+")");
}
}
}
答案 1 :(得分:0)
#define MATRIX_ORDER 3
void NextPosition(int aIndex, int& aRow, int& aColumn)
{
if (aColumn == MATRIX_ORDER - 1)
{
aRow++;
aColumn = 0;
} else {
aColumn++;
}
}
void SomeFunction()
{
int index = 0;
int row = 0;
int column = -1;
while (index < (MATRIX_ORDER * MATRIX_ORDER))
{
NextPosition(index, row, column);
printf("index: %d, row: %d, column: %d\n", index, row, column);
index++;
}
}
输出:
index: 0, row: 0, column: 0
index: 1, row: 0, column: 1
index: 2, row: 0, column: 2
index: 3, row: 1, column: 0
index: 4, row: 1, column: 1
index: 5, row: 1, column: 2
index: 6, row: 2, column: 0
index: 7, row: 2, column: 1
index: 8, row: 2, column: 2
答案 2 :(得分:0)
这是使用生成器的Python解决方案:
def sequence_gen(order=2):
for i in range(order*order):
yield divmod(i, order)
for val in sequence_gen(2):
print(val)
#(0, 0)
#(0, 1)
#(1, 0)
#(1, 1)
for val in sequence_gen(3):
print(val)
#(0, 0)
#(0, 1)
#(0, 2)
#(1, 0)
#(1, 1)
#(1, 2)
#(2, 0)
#(2, 1)
#(2, 2)