有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java生成数字序列

我试图生成一个数字序列。 随它去吧(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&;k

到目前为止,我并没有为所有的案例提供一个有效的方法

输出:

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) 个答案

  1. # 1 楼答案

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

    首先,你应该养成用简洁明了的方式解释问题的习惯,帮助人们理解你的问题是什么。其次,您应该习惯使用广泛使用的camel大小写变量命名,即i_max->;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