算法设计与分析:第二章 递归 2.1计数排序之统计数对

来源:互联网 发布:java如何打war包 编辑:程序博客网 时间:2024/06/05 12:08
/*统计数对:输入N(2<=N<=100)个数字(在0与9之间),然后统计出这组数中相邻数字组成的数字对出现的次数算法思路:采用一个二维数组A[11][11]的相邻数对信息,输入:20(表示要输入的数的数目)0 1 5 9 8  7 2 2 2 3  2 7 8 7 8  7 9 6 5 9输出:*//*关键:1计数排序不仅仅可以适用于一维数组,二维数组也是可以的2最主要是将下标和输出的值之间建立某种关系*/#include <stdio.h>#include <string.h>#include <math.h>const int MAXSIZE = 10000;const int MAXN = 11;int g_numPair[MAXN][MAXN];void printNumPair(){for(int i = 0 ; i < MAXN ; i++){for(int j = 0 ; j < MAXN ; j++){if(g_numPair[i][j]){printf("(%d, %d) = %d",i,j,g_numPair[i][j]);//if(g_numPair[j][i])//{//printf("(%d, %d) = %d",j,i,g_numPair[i][j]);//}printf("\n");}}}}void statNumPair(int* pArr,int iLen){if(!pArr || iLen <= 0){return;}memset(g_numPair,0,sizeof(g_numPair));int iFirstNum ,iSecondNum;for(int i = 1 ; i < iLen ; i++){iFirstNum = pArr[i-1];iSecondNum = pArr[i];if(abs(iFirstNum - iSecondNum) == 1){g_numPair[iFirstNum][iSecondNum]++;}}}void process(){int n;int iArr[MAXSIZE];while(EOF != scanf("%d",&n) ){if(n <= 0){break;}for(int i = 0 ; i < n ; i++){scanf("%d",&iArr[i]);}statNumPair(iArr,n);printNumPair();}}int main(int argc,char* argv[]){process();getchar();return 0;}

0 0
原创粉丝点击