a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。
函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,
从而生成有n/2个元素组成的整数数列;统计该数列中不同整数各自出现的次数,
并将统计结果保存到c指向的二维数组中。函数返回不同整数的个数。
#include <stdio.h>
#define N 16
int stat(int a[], int n, int c[][2])
{
int i = 0;
int j = 0;
int num = 0;
int count = 0;
int k = 0;
int b[10] = {0};
for (i = 0; i < n; i += 2)
{
b[i / 2] = a[i] * 10 + a[i + 1]; //将原始数组的数据相邻数结合组成新的数组b
}
for (i = 0; i < n / 2; i++)
{
printf ("%d ", b[i]); //打印b
}
printf ("\n");
for (i = 0; i < n / 2; i++)
{
for (j = 0; j < i; j++)
{
if (b[i] == b[j])
{
break; //遍历b寻找相同的数,找到第一个就退出
}
}
if (j == i)
{
c[num][0] = b[i]; //如果找到那么就放到c中num行的第一个
for (k = 0; k < n / 2; k++)
{
if (b[k] == b[i])
{
count++; //由于找到第一个就退出,所以需要寻找一共有几个相同的数
}
}
c[num][1] = count; //放到c中num行的第二个
num++;
count = 0;
}
}
return num;
}
void PrintArr(int c[][2], int n) //打印二维数组c
{
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < 2; j++)
{
printf ("%2d", c[i][j]);
}
printf ("time(s)");
printf ("\n");
}
}
int main()
{
int a[N] = {1,3,1,3,3,6,1,5,3,6,1,4,5,2,3,6}; //原始数组
int c[10][2] = {0}; //存放结果的数组
int count = 0; //有多少个数
count = stat(a, N, c);
PrintArr(c, count);
return 0;
}