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;
}