1. 程式人生 > >二維陣列專練(二)

二維陣列專練(二)

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