Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 跳过递归_Recursion - Fatal编程技术网

Recursion 跳过递归

Recursion 跳过递归,recursion,Recursion,第一行是一个数字,intx。以下m行包含字母。在m行之后,读入一个数字,int y 目标是从每行1个字母的递归中找到soluiton数int y 问题是,有一种更快的解决方案,可以避免检查每个可能的密码。这就是我的问题所在。如何做到这一点?任何帮助都将不胜感激。这没那么复杂。您可以计算m行中的字母数。然后为每行字母计算一个值,该值指定如果跳过引用行中的一个字母,将跳过多少个可能的解决方案。可视化: abc -> 3 letters xy -> 2 letters dmnr ->

第一行是一个数字,intx。以下m行包含字母。在m行之后,读入一个数字,int y

目标是从每行1个字母的递归中找到soluiton数int y


问题是,有一种更快的解决方案,可以避免检查每个可能的密码。这就是我的问题所在。如何做到这一点?任何帮助都将不胜感激。

这没那么复杂。您可以计算m行中的字母数。然后为每行字母计算一个值,该值指定如果跳过引用行中的一个字母,将跳过多少个可能的解决方案。可视化:

abc -> 3 letters
xy -> 2 letters
dmnr -> 4 letters
如果您在“abc”行中从第n个字母跳到第n+1个字母,那么您将跳过尽可能多的可能的解决方案,正如下面每一行长度的乘积所示。因此您跳过了2*4个解决方案->
8个解决方案

对xy->
4个解决方案重复此步骤

最后一行跳过alwasy
1解决方案
,因为它本身就是递归路径

现在你知道,如果你跳到某个特定的字母,你会跳过多少个解决方案。最后一件事很简单。从1开始,将每行的计算值添加到数字中,直到精确到r

在c++中表示:

int v = 1, r=10;
int i1=0, i2=0, i3=0;

while (v<=r-8) {
  i1++;
  v+=8;
}
while (v<=r-4) {
  i2++;
  v+=4;
}
while (v<=r-1) {
  i3++;
  v++;
}
intv=1,r=10;
inti1=0,i2=0,i3=0;

虽然(vIt在stackoverlow上有某种意义,不仅仅是为家庭作业问题编写代码,因为它让你无法学习。你应该展示,你到目前为止得到了什么,并解释你陷入困境的地方。@vikingosegundo我认为,在许多情况下,人们不知道从哪里开始。一些提示不会有什么坏处,特别是如果它们让人们以正确的方式思考的话正确的direction@nirk,当然。我知道大脑疼痛复发可能会导致。但op应该显示出一些努力。这种作业不够难,不需要努力就能得到帮助,这不是一个难的数学问题。我不理解输入/输出示例:如果我们从每行中选择一个字母-
r
怎么可能大于3?或者您的意思是说,
r
是输出列表中的元素数,应该是:
axd、axm、axn、
(按字母顺序排序)