题解 | 矩阵交换

矩阵交换

http://www.nowcoder.com/practice/ec44d4ff8c794b2f9205bdddbde96817

矩阵交换

#include<stdio.h>
int main()
{
    int n = 0;//行
    int m = 0;//列
    int arr[10][10] = { 0 };//原数组
    int arr1[10][10] = { 0 };//变换存储在中间数组
    int k = 0;//操作次数
    char t[5] = { '0' };//操作指令数组r c
    int a[5] = { 0 };
    int b[5] = { 0 };
    scanf("%d%d", &n, &m);//获取行和列
    for (int i = 0; i < n; i++)//获取原矩阵
        for (int j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
            arr1[i][j] = arr[i][j];//并将原矩阵数据给中间矩阵
        }
    scanf("%d", &k);//获取操作次数
    for (int i = 0; i < k; i++)

    {
        scanf(" %c",&t[i]);//获取操作指令
        scanf("%d %d", &a[i], &b[i]);
    }
    for (int w = 0; w < k; w++)//进行k次操作
    {
        if (t[w] == 'r')//操作指令为r,就进行换行操作
        {
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (i == a[w] - 1)//原来a行数据交换成b行的数据
                    {
                        arr1[i][j] = arr[b[w] - 1][j];
                    }
                    else if (i == b[w] - 1)//原来b行数据交换成a行的数据
                    {
                        arr1[i][j] = arr[a[w] - 1][j];
                    }
                    else
                    {
                        arr1[i][j] = arr[i][j];//其他没动的地方不操作
                    }
                }
            }
            for (int i = 0; i < n; i++)//操作完后将中间矩阵arr1中数据更新给arr
            {
                for (int j = 0; j < m; j++)
                {
                    arr[i][j] = arr1[i][j];
                }
            }
        }

        else if (t[w] == 'c')//操作指令为c,就进行换列操作
        {
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (j == a[w] - 1)
                    {
                        arr1[i][j] = arr[i][b[w] - 1];
                    }
                    else if (j == b[w] - 1)
                    {
                        arr1[i][j] = arr[i][a[w] - 1];
                    }
                    else
                    {
                        arr[i][j] = arr1[i][j];
                    }
                }

            }
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    arr[i][j] = arr1[i][j];
                }
            }
        }

    }
    for (int i = 0; i < n; i++)//打印中间矩阵arr1或者原矩阵arr的数据都可
    {
        for (int j = 0; j < m; j++)
        {
            printf("%d ", arr1[i][j]);
        }
        printf("\n");//打印一行就换行
    }
    return 0;
}
全部评论

相关推荐

炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务