241221-C08-二维数组
原题链接:33265.笔记 汇总2024-12-21 18:52:03
发布于:江苏
1. 什么是二维数组?
上述二维数组可以理解为4行5列的二维数组。
2. 二维数组实例
实例1. A7832.矩阵输入输出
#include<iostream>
using namespace std;
int main(){
int a[105][105]={}; //定义二维数组并且初始化为0
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){ //n行
for(int j=1;j<=m;j++){ //m列
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<' ';
}
cout<<endl;
}
}
实例2. A30726.【二维数组】【入门】5行3列的二维数组输出第3行
#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int main(){
for(int i=0;i<5;i++){
for(int j=0;j<3 ;j++){
cin>>a[i][j];
}
}
for(int j=0;j<3;j++){
cout<<a[2][j]<<' ';
}
return 0;
}
实例3. A30728.【二维数组】【入门】输出二维数组的某一行
#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int n,m,k;
int main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int j=0;j<m;j++){
cout<<a[k-1][j]<<' ';
}
return 0;
}
实例4. A30729.【二维数组】【入门】二维数组列输出
#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int n,m,k;
int main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
cout<<a[i][k-1]<<endl;
}
return 0;
}
实例5. A30731.【二维数组】【入门】交换行
不用真的去交换对应的行, 只需要在输出的时候进行有选择的输出即可.
#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int n,m;
int main(){
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin>>a[i][j];
}
}
cin>>n>>m;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(i==n) cout<<a[m][j]<<' ';
else if(i==m) cout<<a[n][j]<<' ';
else cout<<a[i][j]<<' ';
}
cout<<endl;
}
return 0;
}
3. 杨辉三角
A30912.【二维数组】杨辉三角1
//#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int a[105][105], n;
int main() {
cin >> n;
// 1.定义二维数组,并且初始化为 1
for (int i=1; i<=n; i++)
a[i][i] = a[i][1] = 1;
// 2.从第3行,第2列开始推导
for (int i=3; i<=n; i++)
for (int j=2; j<=i; j++)
a[i][j] = a[i-1][j] + a[i-1][j-1];
// 3.输出
for(int i=1; i<=n; i++){
for (int j=1; j<=i; j++){
cout << a[i][j] <<" ";
}
cout<<endl;
}
return 0;
}
4.对角线元素
A30264.【二维数组】对角线加10
#include <bits/stdc++.h>
using namespace std;
int a[10][10];
int main(){
for(int i=1;i<=6;i++){
for(int j=1;j<=6;j++)
cin>>a[i][j];
}
for(int i=1;i<=6;i++){
for(int j=1;j<=6;j++){
if(i==j || i+j==7) a[i][j]+=10;
}
}
for(int i=1;i<=6;i++){
for(int j=1;j<=6;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}
5.回形数组的遍历
A30723.【二维数组】【入门】二维数组回形遍历
难点: 注意处理一圈结束之后行和列的边缘值
#include <bits/stdc++.h>
using namespace std;
int a[105][105], n, m;
int main() {
cin >> n >> m;
for (int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
cin >> a[i][j];
}
}
int r=1, c=1;
int idx = 1, k = 0;
while (idx <= n*m){
while (c<=m-k) cout << a[r][c++] <<'\n', idx++;
c--, r++;
while (r<=n-k) cout << a[r++][c] <<'\n', idx++;
r--, c--;
while (c>=1+k) cout << a[r][c--] << '\n', idx++;
c++, r--;
k++; //进行到k个回字, 不再遍历已经输出过的边缘数字
while (r>=1+k) cout << a[r--][c] << '\n', idx++;
r++, c++;
}
return 0;
}
这里空空如也
有帮助,赞一个