二维数组专练(二)

版权声明:https://blog.csdn.net/huashuimu2003 https://blog.csdn.net/huashuimu2003/article/details/84946399

p1630 二维数组旋转

题目

描述 Description
给定一个n*n的二维数组。
输出一个基于中心点90度的二维数组,和一个基于对角线(左上右下)交换的二维数组。
输入格式 Input Format
第一行,一个整数N 2<=N<=100
接下来N行,每行N个用空格隔开的整数。
输出格式 Output Format
首先输出N行,每行N个整数,是输入二维数组的旋转90度。
然后是个空行。
再输出N行,每行N个整数,是上面数组的水平翻转。
样例输入 Sample Input

3
1 2 3
4 5 6
7 8 9

样例输出 Sample Output

7 4 1
8 5 2
9 6 3

1 4 7
2 5 8
3 6 9

时间限制 Time Limitation
1s
注释 Hint
注意细节
来源 Source
课本习题

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[1000][1000];
void init()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
			scanf("%d",&a[i][j]);
}
void work1() 
{
	for (int i=1;i<=n;i++)
	{
		for (int j=n;j>=1;j--)
			printf("%d ",a[j][i]);
		cout<<endl;
	} 
}
void work2() 
{
	for (int i=1;i<=n;i++)
	 {
		for (int j=1;j<=n;j++) 
		{
			if (i==j) printf("%d ",a[i][j]);
			else printf("%d ", a[j][i]);
		}
		cout<<endl;
	}
}
int main()
{
	init();
	work1();
	cout<<endl;
	work2();
	return 0;
}

p1631 矩阵乘法

题目

描述 Description
矩阵就是一个二维数组,有行和列之分,矩阵属于线性代数范畴,矩阵在信息学的领域也有很多应用。
矩阵乘法属于矩阵的经典应用
设a,b,c 分别为 mp(m行p列), pn和 mn的矩阵。如果C=ab
按照矩阵乘法的定义有:
::点击图片在新窗口中打开::
输入格式 Input Format
第一行两个整数N1,M1。表示第一个矩阵的行数和列数。
接下来N1行,每行M1个整数.
接下来一行两个整数N2,M2。表示第二个矩阵的行数和列数。
接下来N2行,每行M2个整数.
输入数据保证 M1和N2相等。
输出格式 Output Format
N1行,每行M2个整数。
表示矩阵相乘之后的二维数组。
样例输入 Sample Input

2 3
3 1 2
0 1 5
3 2
4 3
1 1
6 0

样例输出 Sample Output

25 10
31 1
时间限制 Time Limitation
1s
注释 Hint
1s
数据全在1000以内
来源 Source
课本习题

代码

#include<bits/stdc++.h>
using namespace std;
int m,p,q,n;
int a[1010][1010],b[1010][1010],c[1010][1010];
void init()
{
	cin>>m>>p;
	for (int i=1; i<=m; i++)
		for (int j=1; j<=p; j++)
			cin>>a[i][j];
	cin>>q>>n;
	for (int i=1; i<=q; i++)
		for (int j=1; j<=n; j++)
			cin>>b[i][j];
}
void work()
{
		int s=0;
	for (int i=1; i<=m; i++)
		for (int j=1; j<=n; j++) 
		{
			for (int k=1; k<=q; k++)
				s=s+a[i][k]*b[k][j];
			c[i][j]=s;
			s=0;
		}
}

void print()
{
	for (int i=1; i<=m; i++) 
	{
		for (int j=1; j<=n; j++)
			cout<<c[i][j]<<' ';
		cout<<endl;
	}
}
	
int main() 
{
	init();
	work();
	print();
	return 0;
}

p1632 杨辉三角

题目

描述 Description
杨辉三角是南宋数学家杨辉在《详解九章算法》(1261年)记载并保存了的一个三角形,故称杨辉三角。而在欧洲直到1623年以后,法国数学家帕斯卡在13岁时发现了“帕斯卡三角”。而帕斯卡三角与杨辉三角是一模一样的。
::点击图片在新窗口中打开::
杨辉三角表中的系数具有一定规律,每一行比上一行多一个数,每行除左右两个“一”外,每个数都是其“肩”(左上和右上)上两个数之和.
现在明明在学习杨辉三角的时候,他提出一个问题,如果给出杨辉三角和的行标和列标,能否得到那个元素的值。
例如: 第3行 第3列的元素值就为1,第7行第4列的元素就为20。
但是,第3行第5列是没有值的,对于这种情况我们要能够判断。

杨辉三角的系数是和二项式展开的系数存在一一对应关系。
输入格式 Input Format
第一行读入一个正整数n,表明往下为n行数据。(n<=30)
从第二行到第n+1行,每行两个正整数数(x和y),分别表示杨辉三角里元素的行标和列标(x,y<=30)
如果出现x>y,即出现杨辉三角没有值的情况,我们输出” Error!”(双引号内的内容)
输出格式 Output Format
n行数,与输入想对应行标和列标的 杨辉三角的元素值。
样例输入 Sample Input

4
3 3
7 4
5 9
4 4

样例输出 Sample Output

1
20
Error!
1

时间限制 Time Limitation
1s
注释 Hint
本题需要查询很多次,建议先把整个杨辉三角求出,在根据程序的查询输出值。
来源 Source
经典问题

代码

#include<bits/stdc++.h>
using namespace std;
int a[31][31];
int main()
{
	int n,x,y;
	cin>>n;
	a[1][1]=1;
	int t=0;
	for (int i=2;i<=30;i++)
		for (int j=1;j<=30;j++)
			a[i][j]=a[i-1][j]+a[i-1][j-1];
	for (int k=1;k<=n;k++)
	{
		cin>>x>>y;
		if (a[x][y]==0) cout<<"Error!"<<endl;
		else cout<<a[x][y]<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/huashuimu2003/article/details/84946399