【发布时间】:2017-05-20 01:21:49
【问题描述】:
public class PrintStrLenK {
public static void main(String[] args){
int k = 2;
char[] set = {'0', '1'};
char[] str = new char[k];
generate(k, set, str, 0);
}
static void generate(int k, char[] set, char[] str, int index){
if (index == k){
System.out.println(new String(str));
}
else {
for (int i = 0; i < set.length; i++){
str[index] = set[i];
generate(k, set, str, index + 1);
}
}
}
}
我找到了这段代码,问题是我被要求在排列之间只改变一个字符
输出:
00
01
02
03
10 --> 2 Char changes. Not OK.
11
12
13
20 --> 2 Char changes. Not OK.
21
22
23
30 --> 2 Char changes. Not OK.
31
32
33
应该是
00
01
02
03
13 --> 1 Char change. OK
12
11
10
20 -- > 1 Char change. OK
21
22
23
33 -- > 1 Char change. OK
32
31
30
它必须适用于不同的集合和 k。例如
set = {'0', '1'} and k= 3.
000 001 011 010 110 111 101 100
set = {'0', '1','2','3'} and k= 3.
000 001 002 003 013 012 011 010 020 021 022 023 033 032 031 030 130 131 132 133 123 122 121 120 110 111 112 113 103 102 101 100 200 201 202 203 213 212 211 210 220 221 222 223 233 232 231 230 330 331 332 333 323 322 321 320 310 311 312 313 303 302 301 300
我试图找到解决方案已经 2 天了,但到目前为止还没有。解决方案的 Java、C++ 或伪代码都可以。 谢谢
【问题讨论】:
-
那么,您的问题到底是什么?您发布的代码有什么问题?既然代码是 Java,为什么还要标记 C++?目前还不清楚您到底在问什么。
-
@AlgirdasPreidžius 第一个输出,如果你运行上面的代码得到的,是错误的。因为它应该像帖子中文本“应该是”之后的输出。如您所见,从 03 到 10,2 char 值正在发生变化。我被要求做的是只更改 1 个字符。 03 应该更改为 13,只有 char 0 更改为 1。我已标记 C++,因为如果有人在 C++ 中发布解决方案,则可以。
-
因此,您的任务是进行修改。您尝试过任何方法吗?还是您希望我们 为您编写代码? SO 不是代码编写服务。相关阅读:Open letter to students with homework problems.
-
@AlgirdasPreidžius 是的,我试过了,您不必编写代码。你可以给我一些想法或尝试帮助我。如果我无法寻求解决方案或帮助,这个网站是关于什么的??
-
@Mattia 是的,你措辞的方式可能没有帮助。 FWIW,我不是投反对票的人之一,而且由于看来您现在已经在 ringø 的帮助下找到了答案,所以我取消了其中一个。
标签: java c++ string algorithm combinatorics