ARookie1234
2020-04-08 19:06
采纳率: 81.8%
浏览 129

数组与广义表代码(Cyu'yan):均为栈溢出,求解

幻方矩阵:

描述:

该矩阵可根据输入任意交换两行或两列。

输入格式:

第一行为两个整数n,m表示矩阵的大小为n*m;
接下来为一个n*m的矩阵;
而后一行为一个整数op,表示有op次操作;
接下来op行,每行有三个整数x,y,z。
当x=0时,交换第y行和第z行;当x=1时,交换第y列和第z列。

输出格式:

打印矩阵。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#define maxsize 101000

int change(int a[maxsize], int n, int m,int x, int y, int z)
{
    int i, j, k;
    if(!x)//行交换
        for(i=0;i<m;i++)
        {
            j=a[m*y+i];
            a[m*y+i]=a[m*z+i];
            a[m*z+i]=j;
        }
    else//列交换
        for(i=0;i<n;i++)
        {
            j=a[n*i+y];
            a[n*i+y]=a[n*i+z];
            a[n*i+z]=j;
        }
    return 0;
}

int main()
{
    int n, m, op;
    int x, y, z;
    scanf("%d%d",&n, &m);
    int i,j,k;
    int a[maxsize];
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        {
            scanf("%d",&k);
            a[i*m+j]=k;
        }
    scanf("%d",&op);
    i=0;
    while(i<op)
    {
        i++;
        scanf("%d%d%d",&x,&y,&z);
        if(y!=z)
            change(a,n,m,x,y-1,z-1);
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            printf("%d",a[i*m+j]);
            if(j!=m-1)
                printf(" ");
        }
        if(i!=n-1)
            printf("\n");
    }
    return 0;
}
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2020-04-08 20:30
    已采纳

    图片说明

    // Q1062692.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #define maxsize 101000
    
    int change(int a[maxsize], int n, int m,int x, int y, int z)
    {
        int i, j, k;
        if(!x)//行交换
            for(i=0;i<m;i++)
            {
                j=a[m*y+i];
                a[m*y+i]=a[m*z+i];
                a[m*z+i]=j;
            }
        else//列交换
            for(i=0;i<n;i++)
            {
                j=a[m*i+y];
                a[m*i+y]=a[m*i+z];
                a[m*i+z]=j;
            }
        return 0;
    }
    
    int main()
    {
        int n, m, op;
        int x, y, z;
        scanf("%d%d",&n, &m);
        int i,j,k;
        int a[maxsize];
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
            {
                scanf("%d",&k);
                a[i*m+j]=k;
            }
        scanf("%d",&op);
        i=0;
        while(i<op)
        {
            i++;
            scanf("%d%d%d",&x,&y,&z);
            if(y!=z)
                change(a,n,m,x,y-1,z-1);
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                printf("%d",a[i*m+j]);
                if(j!=m-1)
                    printf(" ");
            }
            if(i!=n-1)
                printf("\n");
        }
        return 0;
    }
    
    
    打赏 评论

相关推荐 更多相似问题