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

清醒疯子 2018-03-09

矩阵转置

描述

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

输入

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

输出

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

原代码:

#include <iostream>

usingnamespace 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>

usingnamespace 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时,方阵填充为如下形式:

1267

35813

4912 14

10 11 15 16

输入

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

输出

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

#include <iostream>

using namespace std;

int main()

{

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

cin>>n;

inta[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

相关推荐