真的尽力了,但还是不会,求帮看思路问题。

#include"stdio.h"
int main()
{
int a[10][10],b[10];
int m,n,i,j,k,t,count;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++)
{
count=0;
for(j=0;j<n;j++)
{
if(a[i][j]==1)
count++;
}
if(count!=n)
{
for(k=0;k<m;k++)
{
b[k]=i;
}
}
}
for(i=0;i<m-k;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=0;
}
}
for(i=m-k-1;i<m;i++)
{
for(t=0;t<k;t++)
{
for(j=0;j<n;j++)
{
a[i][j]=a[b[t]][j];
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%2d",a[i][j]);
}
printf("\n");
}
}

img

帮你稍微改了一下

#include "stdio.h"
int main()
{
    int a[10][10];
    int m, n, i, j, t, s, count,cnt = 0;
    scanf("%d%d", &m, &n);
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }

    printf("\n");
    for (i = m - 1; i >= 0; i--)
    {
        count = 0;
        cnt ++;//记录遍历的行数
        if(cnt > m) break;//如果当前遍历过的行数>m说明全部遍历过了,退出循环
        for (j = 0; j < n; j++)
        {
            if (a[i][j] == 1)
                count++;
        }
        if (count == n)
        { //删
            if (i == 0)
            { //删第一行
                for (t = 0; t < n; t++)
                {
                    a[i][t] = 0;
                }
                break;
            }
            for (s = i; s > 0; s--)
            {
                for (t = 0; t < n; t++)
                {
                    a[s][t] = a[s - 1][t];
                }
            }
            for (t = 0; t < n; t++)
            { //第一行补0
                a[0][t] = 0;
            }
            i ++;//由于下降了一行,这里的i加一重新遍历这一行
        }
    }

    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}