故我


私信TA

用户名:uq_37592642929

访问量:2985

签 名:

一起去啊,更远方的地方!!!!

等  级
排  名 706
经  验 3910
参赛次数 0
文章发表 53
年  龄 0
在职情况 学生
学  校 社会大学
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

#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分

1 人评分

  评论区

  • «
  • »