问题是编写一个函数rotate(ar[],d,n),该函数将大小为n的arr[]旋转d个元素。解决方案(变戏法)在这里http://www.geeksforgeeks.org/array-rotation/.让我困惑的是,为什么循环数是n和d的gcd。有人知道这个例子吗?
基本上,开发人员要做的是
Tmp = arr[0]
for(i=0; i<n-1;i++){
arr[i*d % n] = arr[(i+1)*d % n]
}
arr[n-1] = arr[d-1]
其中GCD(n,d)=1,程序运行良好,例如(n,d)=(5,2)
Tmp = arr[0]
arr[0]= arr[2]
arr[2]= arr[4]
arr[4]= arr[1]
arr[1]= arr[3]
arr[3]= arr[5]
但当GCD(n,d)时
Tmp = arr[0]
arr[0]= arr[2]
arr[2]= arr[4]
arr[4]= arr[0]
arr[0]= arr[2] // probleme because we are not able to go throw each element so we should break from the loop
由于n/GCD(6,2)=3,我们只能正确修改前三个元素,因此他在循环中加入了一个条件,即如果我们返回到第一个元素,他会中断while并将起始元素增加1,因此在下一次迭代中,他会修改arr[1],arr[3],arr[5]
为什么循环数是n和d的gcd
所以循环数是两者的完美分割!如果“c”是所涉及的循环数,那么n应该可以被c完全整除,即n=xc,类似地,d=yc。
现在,在算法中,x是数组中的集合数,y是执行的步骤(或迭代)数。在给定的示例中检查并确认这一点。
选择GCD的主要目的是使x和y是整数,而不是一些浮点值。
问题内容: 因此,目标是将阵列中的元素正确旋转一次。举个例子; 如果, 则将成为 这是我所拥有的: 但是,这无法说明何时大于数组的长度。我读到我应该将更大的存储在另一个Array中,但是看到变量是不确定的,因此我不确定这是最好的解决方案。提前致谢。 问题答案: 在代码中添加一个模数组长度: 您还应该创建一个要复制到的新值,以免覆盖以后需要的值。
问题内容: 是否可以轻松地“旋转” PHP中的数组? 像这样:1,2,3,4-> 2,3,4,1 为此有某种内置的PHP函数吗? 问题答案: 当前大多数答案都是正确的,但前提是您不关心索引: 输出: 要保留索引,您可以执行以下操作: 输出: 也许有人可以比我的四行方法更简洁地进行轮换,但这还是行得通的。
假设我有一个大小为[10]的数组,当该数组被填满时,我想实现一个FIFO结构,而不是它只是填满了,因此无法向数组中添加新的东西,并抛出旧的东西。 例如,如果我有一个包含汽车制造商的字符串数组,当我的数组中有10个制造商时,我希望删除最旧的条目,添加最新的条目,但要考虑kepping FIFO。我如何在这样的方法中实现它:
使用嵌套循环 我仍在努力实现上述问题所述的目标。基本上我的代码现在是这样的: 这很烦人,我不明白为什么会这样! 我想计算地球因太阳和月亮而产生的加速度。所以我有双[]行星质量={earthMass,sunMass,moonMass},一系列粒子物体粒子[]行星={earth,sun,moon}和一系列由于重力而产生的加速度,它们还没有被计算出来:物理矢量[]gravField={earthGrav
假设我有这样的多维数组:
问题内容: 我正在编写一个脚本,该脚本记录来自另一个程序的错误,并在遇到错误时从中断的地方重新启动该程序。不管出于什么原因,该程序的开发人员都没有必要默认将此功能放入其程序中。 无论如何,程序都会获取一个输入文件,对其进行解析,然后创建一个输出文件。输入文件采用特定格式: 当程序引发错误时,它会为您提供跟踪错误所需的参考信息- 即UI,哪个部分(标题或摘要)以及相对于标题或摘要开头的行号。我想使用