解题思路:

注意事项:

参考代码:

#include <stdio.h>

typedef struct {

    int r;

    int c;

    int d;  //数据存储

}tup;

typedef struct {

    int rows;

    int cols;

    int number;   //非零元素的个数

    tup data[100000];

}num;

void change(num x,num *y){

    int n=0;

    y->rows=x.cols;

    y->cols=x.rows;

    y->number=x.number;

    for (int i=0;i<x.cols;i++){   //按列来查找

        for (int j=0;j<x.number;j++){   //在所有非零元素中查找

            if (x.data[j].c==i){  //如果列坐标相同,则将x中的元素转置到y中

                y->data[n].r=x.data[j].c;  

                y->data[n].c=x.data[j].r;

                y->data[n].d=x.data[j].d;

                n++;

            }

        }

    }

    

}

int main (){

    int m,n,t;

    num x,y;

    scanf ("%d %d",&n,&m);

    x.number=0;

    x.rows=n;

    x.cols=m;

    for (int i=0;i<n;i++){

        for (int j=0;j<m;j++){

            scanf ("%d",&t);

            if (t!=0){

                x.data[x.number].d=t;

                x.data[x.number].r=i;

                x.data[x.number].c=j;

                x.number++;

            }

        }

    }

    change(x,&y);

    t=0;

    for (int i=0;i<y.rows;i++){

        for (int j=0;j<y.cols;j++){

            if (y.data[t].r==i&&y.data[t].c==j)   //y中元素下标对应则输出

                printf ("%d ",y.data[t++].d);

            else

                printf ("0 ");

        }

        printf ("\n");

    }

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论