来源
来自于甜甜小可爱,中午打完电话号后,忍不住就动手了...
方法:
从A中取出连续M个以上大于N的数据段放入B。令M=30,N=150,B[50][50]是一个二维数组,B中的一行如B[k]为第k行代表一个数据段,每行的第一个元素B[k][0]存放该行中数据的个数。
1. 先随机产生一个区间在100-200的A数组
2. 当A[i]>N时,循环遍历A数组,把A[i]放入数据段B[k]数组中,直到A[i]<150,退出循环。
3. 如果此时B[k]数组的元素个数大于等于M,就令k++,准备存放下一个数据段。否则,k不变,令指向B[K]数组的循环变量j归为1,重新将新的数据放入这个数据段。
4. 输出B数组中的值。
代码
#include <stdio.h>
#include <stdlib.h>
#define maxSize 50
void Seperate(int A[], int m, int B[][maxSize], int M, int N)//从A中取出连续M个以上大于N的数据段放入B
{
int k = 0, j = 1;
int i;
i = 0;
printf("\n\n从A中取出连续%d个以上大于%d的数据段", M, N);
while (i < m)
{
while (A[i] > N)
{
B[k][j] = A[i];
i++, j++;
}
if (j >= M + 1)
{
B[k][0] = j - 1;
k++;
j = 1;
}
else
{
j = 1;
}
i++;
}
printf("\n\n\n");
for (i = 0; i < k; ++i)
{
printf("第%d个片段,共%d个数: ", i + 1, B[i][0]);
for (j = 1; j <= B[i][0]; ++j)
{
printf("%d ", B[i][j]);
}
printf("\n");
}
}
int main()
{
int A[maxSize], i;
printf("A数组:");
for (i = 0; i < maxSize; ++i)
{
A[i] = rand() % 100 + 100;
printf("%d ", A[i]);
}
int B[maxSize][maxSize];
Seperate(A, maxSize, B, 5, 120);
return 0;
}