【发布时间】:2017-11-21 21:31:36
【问题描述】:
我将通过删除单词来生成不同的句子。我认为这可能是一个众所周知的问题,但我找不到它。
例如: 如果我有这样的句子 "0 1 2 3 4" 有 5 个标记 它必须生成:-
- 0 2 3 4
- 0 1 3 4
- 0 1 2 4
- 0 1 4
- 0 2 4
- 0 3 4
- 0 4
我编写了一个代码,该代码使用句子中的单词数,然后生成我想要的所有可能的句子。 我的代码是
public static void TestPattern(int numOfWords) {
int blankCount=1;
while(blankCount<numOfWords-1) {
for(int i=1;i<=numOfWords-blankCount-1;i++) {
for(int j=0;j<=numOfWords-1;j++) {
boolean blankFound=false;
for(int z=0;z<blankCount;z++) {
if(j==i+z) {
blankFound=true;
break;
}
}
if(blankFound==false) {
System.out.print(j+" ");
}else {
System.out.print("_ ");
}
}
System.out.print("\n");
}
blankCount++;
}
}
当我调用这个函数时 TestPattern(5) 你可以意识到它错过了不连续的情况,例如
- 0 2 4 “0 __ 2 __ 4”
正如你在下面看到的,我生成的句子带有连续的单词“blank out”或“dropped”
for(int z=0;z<blankCount;z++) {
if(j==i+z) {
blankFound=true;
break;
}
}
if(blankFound==false) {
System.out.print(j+" ");
}else {
System.out.print("_ ");
}
还使用 blankCount 变量进行迭代,以便通过删除一个、两个连续的单词来生成字符串
int blankCount=1;
如何修改我的算法以找到这些情况?
【问题讨论】:
-
我对这个问题投了反对票,因为没有证据表明对此代码执行了任何调试。请edit您的问题向我们展示您的调试发现了什么,以及关于特定代码行的特定问题。请参阅:How to create a Minimal, Complete, and Verifiable example 和 How to Debug Small Programs
-
我做到了。但我无法编写算法以获取未命中案例
-
定义您尝试实现的算法。添加到您的代码 (1) 有意义的变量名; (2) cmets 根据需要遵循算法; (3) 输出语句来跟踪数据和控制流。
-
如果您只需要解决问题(而不是修复您的特定代码),请进行研究:您正在尝试生成中间元素的所有组合,这个问题在 Stack 上得到了很好的处理溢出和其他地方在线。 “数组元素的所有组合”或“所有子集”应该可以满足您的需求。