1 条题解

  • 0
    @ 2025-4-12 21:47:19

    C :

    #include <stdio.h>
    typedef struct va{
    	int row;
    	int col;
    	int v;
    }va;
    int main(){
    	int r,c,tmp,i,j,cnt,k;
    	va v[12501];
    //	freopen("1.txt","r",stdin);
    	while (scanf("%d %d",&r,&c)==2)
    	{
    		cnt=0;
    		for (i=0;i<r;i++)
    		{
    			for (j=0;j<c;j++)
    			{
    				scanf("%d",&tmp);
    				if (tmp)
    				{
    					v[cnt].row=j;
    					v[cnt].col=i;
    					v[cnt].v=tmp;
    					cnt++;
    				}
    			}
    		}
    		for (i=0;i<c;i++)
    		{
    			for (j=0;j<r;j++)
    			{
    				for (k=0;k<cnt;k++)
    				{
    					if (v[k].row==i&&v[k].col==j)
    					{
    						printf("%d ",v[k].v);
    						break;
    					}
    				}
    				if (k==cnt)
    				{
    					printf("0 ");
    				}
    			}
    			printf("\n");
    		}
    	}
    //	fclose(stdin);
    	return 0;
    }
    

    C++ :

    #include <stdio.h>
    #define MAXSIZE 12500		// 假设非零元个数的最大值为12500
    #define OK 1
    #define ERROR 0
    typedef int Status;
    typedef int ElemType;		// 定义基本元素的类型为 int 型
    typedef struct{
    	int i, j;				// 该非零元的行下标和列下标
    	ElemType e;
    }Triple;
    
    typedef struct{
    	Triple data[MAXSIZE+1];	// 非零元三元组表,data[0]未用
    	int mu, nu, tu;			// 矩阵的行数、列数和非零元个数
    }TSMatrix;
    
    void InputMatrix(TSMatrix &M){
    	// 读入矩阵 M,r、c为该矩阵的行和列数
    	int i, j;
    	int data;	// 用来存储临时读取近来的数据
    	M.tu = 0;	// 先将非零元地数目初始化为0
    	for(i=1; i<=M.mu; i++){
    		for(j=1; j<=M.nu; j++){
    			scanf("%d", &data);			// 读入元素
    			if(data){					// 如果 data 为非零元
    				M.tu++;					// 先对非零元地数目加1,因为data[0]未用
    				M.data[M.tu].e = data;	// 储存非零元
    				M.data[M.tu].i = i;		// 记录当前元素的行号
    				M.data[M.tu].j = j;		// 记录当前元素的列号
    			}
    		}
    	}
    }
    
    void OutputMatrix(TSMatrix M){
    	// 输出矩阵
    	int i, j;		// 定义迭代变量
    	int t = 1;			// 定位需要输出矩阵中的位置
    	for(i=1; i<=M.mu; i++){
    		for(j=1; j<=M.nu; j++){
    			if(i==M.data[t].i && j==M.data[t].j){	// 需要输出非零元
    				printf("%d ", M.data[t].e);
    				t++;		// 定位下次需要输出的元素
    			}else{
    				printf("0 ");	// 输出零元
    			}
    		}
    		putchar('\n');			// 换行
    	}
    }
    
    Status TransposeSMatrix(TSMatrix M, TSMatrix &T) { // 算法5.1
    	// 采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T
    	int p, q, col;
    	T.mu = M.nu;
    	T.nu = M.mu;
    	T.tu = M.tu;
    	if (T.tu) {
    		q = 1;
    		for (col = 1; col <= M.nu; ++col)
    			for (p = 1; p <= M.tu; ++p)
    				if (M.data[p].j == col) {
    					T.data[q].i = M.data[p].j;
    					T.data[q].j = M.data[p].i;
    					T.data[q].e = M.data[p].e;
    					++q;
    				}
    	}
    	return OK;
    } // TransposeSMatrix
    
    int main(){
    
    	TSMatrix M, T;	// 定义存储矩阵的变量
    	scanf("%d%d", &M.mu, &M.nu);
    	InputMatrix(M);
    	TransposeSMatrix(M, T);
    	OutputMatrix(T);
    
    	return 0;
    }
    
    

    Java :

    
    
    import java.util.Scanner;
    
    public class Main {
       private static Scanner s = new Scanner(System.in) ;
       
       public static void main(String[] args) {
    	  int n = s.nextInt() ;
    	  int m = s.nextInt() ;
    	  
    	  int a[][] = new int[n][m] ;
    	  
    	  for (int i = 0; i < a.length; i++) {
    		for (int j = 0; j < a[0].length; j++) {
    			a[i][j] = s.nextInt() ;
    		}
    	  }
    	  
    	  for (int i = 0; i < a[0].length; i++) {
    			for (int j = 0; j < a.length; j++) {
                   System.out.print(a[j][i]+" ");
    			}
    			System.out.println();
    		  }
       }
    }
    
    
    • 1

    信息

    ID
    1693
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者