亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

來回遍歷數組

來回遍歷數組

繁花不似錦 2021-12-18 09:53:00
我們有一個長度(比如 3)和一些計數序列的數組:0,1,2,3,4,...到無窮大。在該輸入序列中,我們需要生成將來回遍歷數組的序列,例如:0,1,2,1,0,1,2,1,0,...等等length=3。我認為這項任務在許多編程書籍中都很常見,但我找不到標準解決方案,所以我創建了自己的解決方案。有沒有其他更有效和優雅的解決方案,因為我不喜歡我的解決方案???#define LENGTH 5int 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]+" ");        }    }
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

此解決方案arr僅計算from的索引i,從而避免需要保持任何狀態(例如當前方向)。因此,它有點復雜,但也適用于 的非連續值i。


char arr[] = { '0', '1', '2', '3', '4' };

const int LENGTH = sizeof arr / sizeof(*arr); // not necessary for char

assert(LENGTH > 1); // doesn't work for fewer than 2 elements


const int CYCLE = LENGTH - 1;

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

    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避免被零除。


查看完整回答
反對 回復 2021-12-18
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

也許是這樣的:


#define LENGTH 5

int main()

{

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

    int current = 0;

    int direction = 1;

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

    {       

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

        if (current == 0)

            direction = 1;

        else if (current == LENGTH - 1)

            direction = -1;

        current += direction;

    }

}


查看完整回答
反對 回復 2021-12-18
  • 2 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號