编程练习3——02

xiaoxiao2021-02-28  127

2. 编写函数int stat(int a[],int n,int c[][2])。   a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。   函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,   从而生成有n/2个元素组成的整数数列;统计该数列中不同整数各自出现的次数,   并将统计结果保存到c指向的二维数组中。函数返回不同整数的个数。

分析:先把每两个相邻元素拼接起来的数存放在一个数组中,之后便利数组,查询相同的数,记录个数,同时将其放入c数组中。

下面是代码实现:

/**************************************************************************

  编写函数int stat(int a[],int n,int c[][2])。   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 ("-", 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; }
转载请注明原文地址: https://www.6miu.com/read-62771.html

最新回复(0)