生成一系列数字

时间:2014-12-28 19:37:18

标签: java sequences

我试图生成一系列数字。 让它成为(i j k),

1 1 1, 1 1 4, 1 2 3, 1 3 2
2 1 1, 2 1 4, 2 2 3, 2 3 2,
3 1 1, 3 1 4, and so on..

唯一的条件是,i,j& ķ。

到目前为止,我已经提出了如下所示的方法,但这并不适用于所有情况。

输出:

1 1 1, 1 1 4, 1 2 3, 1 2 2, 
1 2 1, 1 1 4, 1 2 3 ...

代码:

seqGen(3, 2, 4, 3);

private static void seqGen(int line_max, int i_max, int k_max, int j_max) {

    int i = 0;
    int j = 0;
    int k = 0;

    while (i <= i_max) {

        System.out.println((i + 1) + " " + (j + 1) + " " + (k + 1));
        int k_ = (k + line_max) % k_max;
        int j_ = ((k + line_max) / k_max) % j_max;
        i = ((k + line_max) / k_max) / j_max;

        k = k_;
        j = j_;

    }
}

知道我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

我不确定你到底在找什么,但我已经尝试解决你的问题了。

首先,您应养成以简洁明了的方式解释问题的习惯,以帮助人们了解您的问题。其次,你应该习惯使用广泛使用的驼峰式变量命名,即i_max - &gt; IMAX。最后,你真的不应该来这里,只是发布一个代码片段并问“我知道我错过了什么?”这在社区中是不受欢迎的;你真的应该来这里展示你尝试过的东西,你想要达到的结果是什么,以及为什么你认为这种情况没有发生......

这就是说这是一个解决我认为你问的问题的解决方案。

HashMap<List<Integer>, Boolean> sequences  =  new HashMap<List<Integer>, Boolean>(); 
int lineMax;
int iMax;
int kMax;
int jMax;

private void setMaxes(int _lineMax, int _iMax, int _kMax, int _jMax) {
    if (_iMax + _kMax + _jMax > _lineMax){
        //throw an error right?
    }
    lineMax = _lineMax;
    iMax = _iMax;
    kMax = _kMax;
    jMax = _jMax;
}


private void seqGen(int currentI, int currentJ, int currentK) {
    if (!sequences.containsKey(Arrays.asList(currentI, currentJ, currentK))) {
        if (currentI <= iMax && currentJ <= jMax && currentK <= kMax 
                && currentI+currentJ+currentK <= lineMax) {
            sequences.put(Arrays.asList(currentI, currentJ, currentK), true);
            System.out.println(Arrays.asList(currentI, currentJ, currentK));
            seqGen(currentI+1, currentJ, currentK);
            seqGen(currentI, currentJ+1, currentK);
            seqGen(currentI, currentJ, currentK+1);
        }
    }
}

Run an example here