|
发表于 2019-11-10 13:58:47
|
显示全部楼层
- #include <stdio.h>
- int main(void)
- {
- int d[4][5] = {{2 , 2 , 3 , 1 , 2} ,\
- {3 , 1 , 1 , 1 , 1} ,\
- {2 , 3 , 2 , 1 , 3} ,\
- {2 , 2 , 3 , 3 , 3}} ;
- int c , e[4][5] , i , j , k ;
- /* 把 d 复制到 e 中,因为 e 要动态修改,所以,d 作为参考非常必要 */
- for(i = 0 ; i < 4 ; i ++) for(j = 0 ; j < 5 ; j ++) e[i][j] = d[i][j] ;
- /* 按行的方向扫描相邻相等的元素并计数、删除 */
- for(i = 0 ; i < 4 ; i ++) { // 4 行
- for(c = 1 , j = 1 ; j < 5 ; j ++) { // 5 列
- if(d[i][j] == d[i][j - 1]) { // 如果同行相邻元素相等
- c ++ ; // 重复元素计数
- } else { // 否则,相邻元素不相等
- if(c > 2) for(k = j - c ; k < j ; k ++) e[i][k] = 0 ; // 如果有相等元素计数就悉数就置 0
- c = 1 ; // 重新初始化重复元素计数器
- }
- }
- if(c > 2) for(k = j - c ; k < j ; k ++) e[i][k] = 0 ; // 行结束,如果有相等元素计数就悉数就置 0
- }
- /* 按列的方向扫描相邻相等的元素并计数、删除 */
- for(j = 0 ; j < 5 ; j ++) { // 5 列
- for(c = 1 , i = 1 ; i < 4 ; i ++) { // 4 行
- if(d[i][j] == d[i - 1][j]) { // 如果同列相邻元素相等
- c ++ ; // 重复元素计数
- } else { // 否则,相邻元素不相等
- if(c > 2) for(k = i - c ; k < i ; k ++) e[k][j] = 0 ; // 如果有相等元素计数就悉数就置 0
- c = 1 ; // 重新初始化重复元素计数器
- }
- }
- if(c > 2) for(k = i - c ; k < i ; k ++) e[k][j] = 0 ; // 列结束,如果有相等元素计数就悉数就置 0
- }
- /* 打印原始输出数组 d */
- for(i = 0 ; i < 4 ; i ++) {
- for(j = 0 ; j < 5 ; j ++) printf("\t%d" , d[i][j]) ;
- printf("\n") ;
- }
- printf("\n") ;
- /* 打印删除了重复元素的数组 e */
- for(i = 0 ; i < 4 ; i ++) {
- for(j = 0 ; j < 5 ; j ++) printf("\t%d" , e[i][j]) ;
- printf("\n") ;
- }
- }
复制代码 |
|