ARookie1234 2020-04-08 19:06 采纳率: 100%
浏览 134
已采纳

数组与广义表代码(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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示