我试图生成一系列数字。 让它成为(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_;
}
}
知道我错过了什么吗?
答案 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);
}
}
}