• 两道题,雅礼一题矩阵转置


    矩阵转置

    描述

    输入一个n行m列的矩阵A,输出它的转置AT

    输入

    第一行包含两个整数n和m,表示矩阵A的行数和列数。1 <= n <= 100,1 <= m <= 100。
    接下来n行,每行m个整数,表示矩阵A的元素。相邻两个整数之间用单个空格隔开,每个元素均在1~1000之间。

    输出

    m行,每行n个整数,为矩阵A的转置。相邻两个整数之间用单个空格隔开。

     

    原代码:

    #include <iostream>

    using namespace std;

    int a[101][101];

    int main()

    {

        int m,n;

        cin>>m>>n;

        for(int i=1;i<=m;i++)//输入

            for(int j=1;j<=n;j++)

               cin>>a[i][j];

        for(int j=1;j<=m;j++)//输出倒置

          {

            for(int i=1;i<=n;i++)

               cout<<a[i][j]<<" ";

            cout<<endl;

          }

        return 0;

    }

    正确代码:

    #include <iostream>

    using namespace std;

    int a[101][101];

    int main()

    {

        int m,n;

        cin>>m>>n;

        for(int i=1;i<=m;i++)//输入

            for(int j=1;j<=n;j++)

               cin>>a[i][j];

        for(int j=1;j<= n;j++)

          {

            for(int i=1;i<= m;i++)

               cout<<a[i][j]<<" ";

            cout<<endl;

          }

        return 0;

    }

     

    错误原因:仅当n=m时,程序成立,需把n和m调换过来

    24:蛇形填充数组

    总时间限制: 

    1000ms

     

    内存限制: 

    65536kB

    描述

    用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。

    蛇形填充方法为:

    对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。

    比如n=4时,方阵填充为如下形式:

    1  2  6  7

    3  5  8  13

    4  9  12 14

    10 11 15 16

    输入

    输入一个不大于10的正整数n,表示方阵的行数。

    输出

    输出该方阵,相邻两个元素之间用单个空格间隔。

    #include <iostream>

    using namespace std;

    int main()

    {

        int n,k=1,i=1,j=1;

             cin>>n;

             int a[n+1][n+1];

        while(k<=n*n)

               {

            while(j<=n&&i>=1)

                         {

                           a[i][j]=k;//往右上角走

                                i--;

                                j++;

                                k++;

                         }

                       i++;//换行

            if(j>n)//列锁定

                         {

                           i++;

                                j--;

                         }

            while(j>=1&&i<=n)//往左下角走

                         {

                           a[i][j]=k;

                                i++;

                                j--;

                                k++;

                         }

                       j++;

            if(i>n)//行锁定

                         {

                           i--;

                                j++;

                         }

         }

        for(int i=1;i<=n;i++)

                {

                   for(int j=1;j<=n;j++)

                            cout<<a[i][j]<<" ";

                         cout<<endl;

                }

        return 0;

    }

    思路:当数字走到边缘时进行转弯,while(k*k)

  • 相关阅读:
    ThinkSNS+ PHP开发概述
    基础知识--封装、继承、多态、抽象
    读书笔记--《你在为谁工作》
    深入理解设计模式(终):总结--设计模式是药,没病就不要吃药
    深入理解设计模式(24):外观模式
    深入理解设计模式(23):代理模式
    深入理解设计模式(22):享元模式
    深入理解设计模式(21):组合模式
    深入理解设计模式(20):桥接模式
    深入理解设计模式(19):装饰模式
  • 原文地址:https://www.cnblogs.com/jr-ag/p/8531899.html
Copyright © 2020-2023  润新知