当前位置: 首页 > 编程语言 > C#

C#-NForLoop分享

时间:2023-04-10 17:44:05 C#

C#:NForLoop如何将这段代码转换成嵌套的for循环:intnum=4;for(inti=0;i<=num;i++){for(intj=0;j+i<=num;j++){for(intk=0;i+j+k<=num;k++){for(intl=0;i+j+k+l<=num;l++){Console.WriteLine(i+""+j+""+k+""+l);}}}}因此,如果num为2,则只有2个for循环;我和j。这不是家庭作业,我希望反复进行。每个Console.WriteLine()都需要像元素一样存储在一起。该程序的输出创建了一个n维超高斯指数。好的,您想要一个在num中参数化并且具有恒定数量的嵌套循环的非递归解决方案,是吗?这是执行此操作的方法的草图。填写细节留作练习。首先,我假设您有一个不可变类型“Vector”,它可以是0元组、1元组、2元组、3元组……n元组。此方法获取向量的大小并返回该大小的向量序列。IEnumerableMakeVectors(intnum){Vectorcurrent=newVector(num);//创建一个包含num个项目的全零向量。while(true){yieldreturncurrent;下一个向量;boolgotAnother=GetNextVector(current,outnext);如果(!gotAnother)中断;当前=下一个;}}那里。这个问题现在已经简化为两个更小的问题:1)给定一个大小为num的向量,它是序列中的最后一个向量吗?2)如果不是,下一个向量是什么?根据当前向量的内容找出下一个向量应该非常简单:增加最后一个槽的值。如果太大,将其设置为零并增加前一个插槽的值。重复直到找到要添加的内容。合理的?通常,您会在具有嵌套循环的地方使用递归,其中嵌套循环的数量在编译时是未知的。有点想法的东西:voidfunc(constvector×,intdepth){if(depth==times.size())return;for(inti=0;itellyouthisisnothomework,seebelow:publicvoidLoopRecursively(StackvaluesSoFar,intdimensions){for(vari=0;SumOf(valuesSoFar)+ivalues){returnvalues.Sum(x=>x);}privatestringStringOf(IEnumerablevalues){returnstring.Join("",values.Reverse().Select(x=>x.ToString()).ToArray());}作为替代方案要分别处理数字,如在递归解决方案和使用Vector的解决方案中所做的那样,您可以依靠机器表示和算术。如果您需要在每个循环中检查每个数字,这不会更快,但如果您正在实施迭代器,然后它会减少迭代器中的存储空间,如果你没有使用每个数值,那么它也可能会提高你的效率。无论如何,这是一个有趣的等价物。开始......首先考虑稍微更常见的情况有n个嵌套循环,每个循环从0到num计数。在这种情况下基本上只是从0计数到num^n-1。所以你可以这样做:for(intx=0;x注意:无论如何,对于您的特定问题,您不希望每次都计数到num,您希望计数到num-(已确定数字的总和)。解决这个问题的最简单方法就是在循环中放置一个适当的继续条件。以下是当n=2和num=10时要替换的一些值:for(x=0;x<100;x++)//即x(我并不是说你应该在代码中实际使用100和num,如果10不是很明显,这只是一个说明性的例子。)你可以通过计算x增加多少来提高效率,或者通过缩小x的范围然后直接映射到一个子空间而不是整个空间。(但是在2-d和3-d中你只使用了可能值的一半,所以额外的工作只会让你的速度提高2。我认为当n>3时是一样的,但我现在太懒了,抱歉!)以上就是C#学习教程的全部内容:C#:NFor循环分享。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注---本文收集自网络,不代表侵权,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处: