编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,从而生成有n/2个元素组成的整数数列;统计该数列中不同整数各自出现的次数,并将统计结果保存到c指向的二维数组中。函数返回不同整数的个数。
#include <stdio.h>
int stat(int a[],int n,int c[][2]);
int main()
{
int num1[20] , num2[10][2];
int i ;
printf("Please input 20 integer from 0 to 9 :\n");
for( i = 0 ; i < 20 ; i++ )
{
scanf("%d",&num1[i]);
}
stat(num1,20,num2);
return 0;
}
int stat(int a[],int n,int c[][2])
{
int new_num[n/2];
int i , j , k , num , count ; //num记录数字的最后个数,count记录合成的数中相同的数的个数
for( i = 0 ,j = 0; j < n ; i++ )
{
new_num[i] = a[j] * 10 + a[j + 1]; //求合成的新数,并依次存放在new_num数组里
j = j + 2;
}
for( i = 0 , num = 0; i < n / 2 ; i++ )
{
k = new_num[i];
count = 1;
for( j = i + 1 ; j < n / 2 ; j++ )
{
if( new_num[i] == new_num[j] ) //查找新数中的相同数
{
count++;
new_num[j] = -1; //将后面相同的数置为 -1
}
}
if(new_num[i] >= 0) //将新数及个数存放在c数组,相同的新数只存放一遍
{
c[num][0] = new_num[i];
c[num][1] = count;
num++;
}
}
printf("The c array is :\n");
for( i = 0 ; i < num ; i++ )
{
for( j = 0 ; j < 2 ; j++ )
{
printf("%-4d",c[i][j]);
}
printf("\n");
}
return ;
}
结果示例:
Please input 20 integer from 0 to 9 :
1 2 3 4 5 6 1 2 3 4 0 0 1 2 3 4 5 6 5 6
The c array is :
12 3
34 3
56 3
0 1