编程练习3——02

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 ("%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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值