一个C语言输出矩阵非0行的问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 17:57:46
有一个n*m矩阵存在数组a[n-1][m-1]里
现在里面有些行是全0行
现在如何将全0行移到最下面

先查有多少全0行

如果一行是0,最后一行不是0,把最后一行依次赋值进来,再把最后一行赋值成0
如果最后一行是0,查最后一行减1行(用一个变量存行号)

如果又一行是0,把(存行号变量)减1行,依次赋值进来,再把最后一行减1行赋值成0
。。。。。

不很具体地说

最简单的方法

int b[n-1][m-1],head=0,tail=n-1;

然后用FOR循环N次进行扫描,非全0行放到从上面开始放,是全0行的从下面开始放,每次放好后head++,tail--

很简单吧?

如果不要求保持非0行的上下顺序,那么按以上各位的算法就行了.
如果要保持顺序,那么还是从上往下一行行扫描吧,碰到全0行就和下一行对换,

#define N 6
#define M 8
#include <stdio.h>
void main()
{
int a[N][M],b[N],i,j,biaoji,temp;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{ b[i]=0;
for(j=0;j<M;j++)
{ if(a[i][j]!=0)
{ b[i]=1; break;}
}
}
for(i=N-1;i>=0;i--)
{
if(b[i]==1)
{ biaoji=i;/*biaoji记录最后面的一个非0行*/
break;
}
}