2

问题: 我需要生成以下序列。我将矩阵的顺序作为输入。

示例:
我需要生成其元素的位置序列。

 (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:
该函数必须是线程安全的,因为应用程序是多线程的。我知道这种情况没有任何区别。只是想传达整个问题。

Precision:
我已经尝试过我的解决方案,但我认为它很有效。我正在寻找一种有效的方法来做到这一点。你可以只提步骤。我不需要任何特定语言的实现。如果该问题需要更多信息,请告诉我。

4

3 回答 3

2

使用全局变量来存储您调用该函数的次数。调用它t。如果 order 是order,那么

f = ( tdiv order, tmod order)

其中div是整数除法(例如 5 div3 = 1),mod是模数(即除法的余数)。(例如 5 mod3 = 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]+")");
        }
    }
}
于 2012-09-28T17:29:20.907 回答
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
于 2012-09-28T17:35:36.257 回答
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)
于 2012-09-28T19:17:01.203 回答