二維陣列專練(二)
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;
}