| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2172 人关注过本帖, 1 人收藏
标题:要想这样打印二维数组?用递归?还是用什么方法?
取消只看楼主 加入收藏
messifans
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-8-13
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:2 
要想这样打印二维数组?用递归?还是用什么方法?
写一个C程序,类似如下 已知一个二维数组
1 2 0 0
3 5 0 0
4 6 0 0
打印出结果:
134 136 154 156
234 236 254 256
这只是一个例子用来说明问题,实际上是针对一个m行n列的结果。
另外也希望考虑如下情况:
1 2 0 0
0 0 0 0
4 6 0 0
即中间某一行全为0;我们希望结果是104 106 204 206;
当然不用考虑这样的情况,即
0 1 2 0
3 5 0 0
4 6 0 0
即0肯定是不会出现在每一行开始处的,0肯定都集中在右侧。
其实这个二维数组是这样产生的:
我们初始化了一个二维数组,全为0;
在每一行保存了一个问题的结果,所以只会 1 2 0 0,这样  不会0 1 2 0 ,当然会有0 0 0  0全为0 的情况。。。
不知道我说清楚了没???。。。哎我,谢谢大家
有大神没?整一个啊。。。

同志们能具体点不???
第一感觉都挺简单,三个for循环,具体实现由很多问题啊。。。亲。。。

非常感谢大家的帮助,以下是我觉得比较好的解决方法,另外8楼朋友虽然不完全满足要求,但这想法可以值得借鉴。个人觉着for循环在这里会相当麻烦,不可取。。。
---------------------------------------------------------------------------------------------------------------------------------------------------
程序代码:
#include<stdio.h>
#include <stdlib.h>
#define M 3
#define N 4

void main()
{
        
        int arr[M][N] = {{1,2,0,0},{0,0,0,0},{4,6,0,0}};
        int i[N] = {0}; // 控制每行的位置
        int end[M] = {0}; // 每行的有效位数
        int index = 0;
        int l;
        int r[M] = {0};
        int k,j;
        /*
        ** 预处理,找到每行的有效位数
        */
        for (k = 0; k<M; k++)
        {
                end[k] = 1;//每行有效位默认为1
                for (j = 0; j<N; j++)
                {
                        if (0 != arr[k][j]) // 找到最后一个不为0的数,设置该行的有效位数
                                end[k] = j + 1;
                }
        }

        /*
        ** 开始循环,index指示当前行,i[index]指示当前行的当前列
        */
        while(index < M && index >=0)
        {
                if( i[index] < end[index] ) // 如果当前行的当前列小于当前行的有效位数,则存入r[]中
                {
                        r[index] = arr[index][i[index]];
                        i[index]++;                                // 当前行的列数+1
                        index++;                                // 行数+1,即到下一行
                }
                
                if (M == index)             // 如果当前行数为M,则r[]存满了,打印输出,同时回到上一行
                {
                        for (l = 0; l<M; l++)
                        {
                                printf("%d", r[l]);
                        }
                        printf("\n");
                        index --;
                }
                if (i[index] == end[index]) // 如果当前行的列数已经到了有效位数,则当前行的列数回到0处,同时回到上一行
                {
                        
                        i[index] = 0;
                        index --;
                        
                }
        }


        

}



[ 本帖最后由 messifans 于 2013-8-14 10:03 编辑 ]
2013-08-13 20:24
messifans
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-8-13
收藏
得分:0 
回复 4楼 love云彩
非常感谢,这的确解决了我说的那个例子,不过实际上我这个矩阵是m行n列的,不是确定的,
这样for循环是不是有点问题?如果我是10行4列的结果呢?这样我感觉还是有点问题,你觉着呢?
2013-08-13 21:56
messifans
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-8-13
收藏
得分:0 
回复 3楼 veketdelphi
非常感谢,这的确解决了我说的那个例子,不过实际上我这个矩阵是m行n列的,不是确定的,
这样for循环是不是有点问题?如果我是10行4列的结果呢?这样我感觉还是有点问题,你觉着呢?
另外针对类似这样的数组int arr[3][4] = {{1,2,0,0},{0,0,0,0},{4,6,0,0}};就是某一行结果全为0的,可能也有问题。
我们希望结果是104 106 204 206
2013-08-13 21:57
快速回复:要想这样打印二维数组?用递归?还是用什么方法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053059 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved