2016-12-10 57 views
0

2我想通過在半壓縮的方式的兩個陣列,使得儘可能多的條目越好,按以下的模式中觀察到的循環:遍歷嵌套循環兩個由用C

arr1[i] arr2[j] 
arr1[i] arr2[j+1] 
arr1[i+1] arr2[j+2] 
arr1[i+1] arr2[j+3] 
.... 

例如,如果len ARR1是96和len ARR2是3,我想看到

0 0 
0 1 
1 2 
1 0 
2 1 
2 2 
3 0 
3 1 
4 2 
4 0 
5 1 
5 2 

我有一點點麻煩的邏輯完全正確的;任何幫助將不勝感激

回答

4

僞代碼:

i = 0; 
for (x = 0; i < arr1.len; ++x) { 
    i = x/2; // integer division 
    j = x % arr2.len; 
    // use arr1[i] and arr2[j] 
} 

使用整數除法上移動到下一個值之前,多次重複的值(例如0 0 1 1 2 2 3 3 ...),你想重複一個值的次數等於分母。

使用模分割無限地重複一系列值(例如0 1 2 0 1 2 0 1 2 ...),其中序列中的項數等於分母。

0

如果我已經正確地理解了你,你需要一個類似於下面演示程序中所示的循環。

#include <stdio.h> 

#define N 10 
#define M 3 

int main(void) 
{ 
    int a[N]; 
    int b[N]; 

    for (int i = 0; i < N; i++) a[i] = i; 
    for (int i = 0; i < M; i++) b[i] = i; 

    for (int i = 0, j = 0, k = 1; i < N; i += k ^= 1, j = (j + 1) % M) 
    { 
     printf("%d %d\n", a[i] , b[j]); 
    } 
} 

程序輸出是

0 0 
0 1 
1 2 
1 0 
2 1 
2 2 
3 0 
3 1 
4 2 
4 0 
5 1 
5 2 
6 0 
6 1 
7 2 
7 0 
8 1 
8 2 
9 0 
9 1