我想以半压缩方式循环遍历两个数组,以便尽可能多地输入以下模式:
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
我在完全正确地使用逻辑方面遇到了一些麻烦;任何帮助将不胜感激
答案 0 :(得分: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 ...),其中序列中的项目数等于分母。
答案 1 :(得分: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