在 C 中索引嵌套循环

计算科学 计算物理学 C 快速多极
2021-12-05 12:36:16

我无法在函数内正确索引 C 中的以下语句,然后将其作为指针返回。返回部分不应该令人困惑 - 希望 - 但是索引是一个麻烦。P 可以是任何大于或等于 0 的实数,并且应该是指向大小为 [p+1][2*p+1] 的二维数组的指针。Ojnkm

此外,这个条件成立:对于这没什么大不了的,因为一个简单的 if else 语句可以处理它,但是下面描述的嵌套循环、指针和索引情况才是真正的问题。任何想法如何照顾这个?Ojnkm=0|km|>(jn)

j=0pk=j+jn=0jm=nnOjnkm

此外,到目前为止,我被这个算法困住了,这是一个试图调试的噩梦。

for (j=0; j<=p; j++){
 for (k=-j; k<=j; k++){
    for (n=0; n<=j; n++){
     for (m=-n; m<=n; m++){
      if ( abs(k-m) <= (j-n) ){
        printf("\nIndex[%d][%d]:\t %d", j-n, k-m, (2*p+1)*(j-n) + k+j-m-n );
      }
    }
  }
}}

谢谢,

1个回答

首先,在您的最后一笔款项中,您的限制有误(我猜上限是)。以下是更正后的声明:n

j=0pk=j+jn=0jm=nnOjnkm

如果不是这种情况,请更新。接下来,在第二个总和中,我相信上限是,而不是,用于正确的嵌套操作(否则它不是嵌套,你可以解耦循环)。如果我错了纠正我:kj

j=0pk=j+jn=0km=nnOjnkm

接下来,在所有情况下,您的索引都不可能发生条件,这可能是不必要的,所以,如果我重写,这是同一件事:

j=0pk=0+jn=0km=nnOjnkm

这是代码:

for (j=0; j<=p; j++){
     for (k=0; k<=j; k++){
        for (n=0; n<=k; n++){
         for (m=-n; m<=n; m++){
          if ( abs(k-m) <= (j-n) ){
            printf("\nIndex[%d][%d]:\t %d", j-n, k-m, (2*p+1)*(j-n) + k+j-m-n );
          }
        }
      }
    }
}