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 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站