来回遍历数组

我们有一个长度(比如 3)和一些计数序列的数组:0,1,2,3,4,...到无穷大。在该输入序列中,我们需要生成将来回遍历数组的序列,例如:0,1,2,1,0,1,2,1,0,...等等length=3。


我认为这项任务在许多编程书籍中都很常见,但我找不到标准解决方案,所以我创建了自己的解决方案。有没有其他更有效和优雅的解决方案,因为我不喜欢我的解决方案???


#define LENGTH 5

int main()

{

   char arr[LENGTH] = {'a','b','c','d','e'};

   int i;

   int base=0;

   for(i=0;i<100;i++){ 

        if(i%(LENGTH-1)==0){ 

            if(base==0) base=LENGTH-1;

            else base =0;

        }

    int j = abs(base-i%(LENGTH-1)); 

    printf("%c ",arr[j]); 

   }

}

Java 代码(为方便起见):


public static void traverse(){

        char arr[] = {'a','b','c','d','e'};

        int base=0;

        for(int i=0;i<100;i++){ 

            if(i%(arr.length-1)==0){ 

            if(base==0) base=arr.length-1;

            else base =0;

            }

        int j = Math.abs(base-i%(arr.length-1)); 

        System.out.println(arr[j]+" ");

        }

    }


繁花不似锦
浏览 152回答 2
2回答

蛊毒传说

此解决方案arr仅计算from的索引i,从而避免需要保持任何状态(例如当前方向)。因此,它有点复杂,但也适用于 的非连续值i。char arr[] = { '0', '1', '2', '3', '4' };const int LENGTH = sizeof arr / sizeof(*arr); // not necessary for charassert(LENGTH > 1); // doesn't work for fewer than 2 elementsconst int CYCLE = LENGTH - 1;for (int i = 0; i < 100; ++i) {&nbsp;&nbsp; &nbsp; printf("%c ", arr[ (i / CYCLE) & 1 ? CYCLE - i % CYCLE : i % CYCLE ]);}printf("\n");说明:i / CYCLE是数组中循环的编号,并& 1检查该编号的最低有效位以确定方向(位为1的奇数循环向后,偶数循环-从0-向前)。i % CYCLE是前向循环,但由于CYCLE = LENGTH - 1,它没有到达数组的最后一个索引。CYCLE - i % CYCLE是向后循环,从 开始CYCLE - 0,这是前进时未到达的最后一个索引,结束于1,从而避免0再次前进时索引的重复。换句话说,向前和向后循环都省略了一个索引以避免在改变方向时重复,因此CYCLE = LENGTH - 1,这也意味着LENGTH必须至少2避免被零除。

侃侃尔雅

也许是这样的:#define LENGTH 5int main(){&nbsp; &nbsp; char arr[LENGTH] = { 'a','b','c','d','e' };&nbsp; &nbsp; int current = 0;&nbsp; &nbsp; int direction = 1;&nbsp; &nbsp; for (int i = 0; i < 100; i++)&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; printf("%c ", arr[current]);&nbsp; &nbsp; &nbsp; &nbsp; if (current == 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; direction = 1;&nbsp; &nbsp; &nbsp; &nbsp; else if (current == LENGTH - 1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; direction = -1;&nbsp; &nbsp; &nbsp; &nbsp; current += direction;&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java