二级 二维数组3

发布于:2025-02-10 ⋅ 阅读:(16) ⋅ 点赞:(0)

对角线之和
题目描述
输入一个矩阵,输出右上-左下对角线上的数字和
输入
输入1个整数N。(N<10)表示矩阵有n行n列
输出
对角线的和

样例
输入复制
4
1 2 3 4
2 3 4 5
4 5 6 7
1 2 3 4
输出复制
14
#include<iostream>
using namespace std;
int main()
{
	int n,cnt=0;
	cin>>n;
	int a[100][100];
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cin>>a[i][j];
		}
	}
	int sum=0;
	for(int i=0;i<n;i++){
		sum=a[i][cnt]+sum;
		cnt++;
	}
	cout<<sum;
}

右转90度
题目描述
输入一个矩阵,输出他右转90度后的结果
输入
输入1个整数N。(N<10)表示矩阵有n行n列
输入n行,代表矩阵内的数据
输出
右转90度后的结果

样例
输入复制
3
1 2 3
4 5 6
7 8 9
输出复制
7 4 1
8 5 2
9 6 3

#include<iostream>
using namespace std;
int main()
{
    int a[100][100];
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=n;j>=n;j--){
			cout<<a[j][i]<<"\t";
		}
		cout<<endl;
    }
}

 矩阵交换行
描述
给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素
排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。
输入
输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格分开。
第6行包含两个整数m、n,以一个空格分开。(1 <= m,n <= 5)
输出
输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。

#include<iostream>
using namespace std;
int main()
{
	int n,m,a[100][100];
	for(int i=0;i<5;i++){
		for(int j=0;j<5;j++){
			cin>>a[i][j];
		}
	}
	cin>>n>>m;
	for(int i=0;i<5;i++){
		for(int j=0;j<5;j++){
			if(j==n){
				cout<<a[i][n]<<" ";
			}
			else if(j==m){
				cout<<a[i][m]<<" ";
			}
			else{
				cout<<a[i][j]<<" ";
			}
		}
		cout<<endl;
	}
}

数字走向
题目描述
输入整数N,输出相应方阵。
输入
一个整数N。( 0 < n < 10 )
输出
一个方阵,每个数字的场宽为3。
样例
输入复制
5
输出复制
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
10 9 8 7 6
5 4 3 2 1

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int a[20][20];
	int num=1;
	int i=5,j=5;
	while(i>=1&&j>=1){
		a[i][j]=num++;
		j--;
		if(j<1){
			j=5;
			i--;
		}
	}
	for(i=1;i<=5;i++){
		for(j=1;j<=5;j++){
			cout<<setw(3)<<a[i][j];
		}
		cout<<endl;
	}
}

斜角I
题目描述
输入整数N,输出相应方阵。
输入
一个整数N。( 0 < n < 10 )
输出
一个方阵,每个数字的场宽为3。
样例
输入复制
5
输出复制
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9

#include<iostream>
using namespace std;
int x[]={0,1,0,-1};
int y[]={1,0,-1,0};
int k=1,num=1,i=1,j=1,n,m,tx,ty;
int a[100][100]={0};
int main()
{
	cin>>n>>m;
	while(num<=n*m){
		if(i>=1&&i<=n&&j>=1&&j<=m){
			a[i][j]=num;
		}
		i++;
		j--;
		if(j<1){
			i=1;
			k++;
			j=k;
			num++;
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	
}

蛇形遍历
用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。
蛇形填充方法为:
对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各
条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。
比如n=4时,方阵填充为如下形式


输入
输入一个不大于10的正整数n,表示方阵的行数。
输出
输出该方阵,相邻两个元素之间用单个空格间隔。

#include<iostream>
using namespace std;
int x[]={0,1,0,-1};
int y[]={1,0,-1,0};
int k=1,num=1,i=1,j=1,n,m,tx,ty;
int a[100][100]={0};
int main()
{
	cin>>n>>m;
	while(num<=n*m){
		if(i>=1&&i<=n&&j>=1&&j<=m){
		    a[i][j]=num;
			num++;
		}
		i++;
		j--;
		if(j<1){
			i=1;
			k++;
			j=k;
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	
}

回形遍历
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个
数组。如图所示:
输入
输入的第一行上有两个整数,依次为row和col

余下有row行,每行包含col个整数,构成一个
二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 
< col < 100)
输出
按遍历顺序输出每个整数。每个整数占一行。
输入复制
3 3
1 2 3
8 9 4
7 6 5
输出复制
1
2
3
4
5
6
7
8
9

#include<iostream>
using namespace std;
int x[]={0,1,0,-1};
int y[]={1,0,-1,0};
int k=0,num=1,i=1,j=1,n,m,tx,ty;
int a[100][100]={0};
int main()
{
	cin>>n>>m;
	while(num<=n*m){
		a[i][j]=num;
		num++;
		tx=i+x[k];
		ty=j+y[k];
		if(a[tx][ty]==0&&tx>=1&&tx<=n&&ty>=1&&ty<=m)
			i=tx,j=ty;
		else
			k++;
		    if(k>3)
				k=0;
		        i=i+x[k];
		        j=j+y[k];
	}
	for(i=0;i<=n;i++){
		for(j=0;j<=m;j++){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	
}

用while循环输入句子:

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int a[20][20];
	int num=1;
	int i=5,j=5;
	while(i>=1&&j>=1){
		a[i][j]=num++;
		j--;
		if(j<1){
			j=5;
			i--;
		}
	}
	for(i=1;i<=5;i++){
		for(j=1;j<=5;j++){
			cout<<setw(3)<<a[i][j];
		}
		cout<<endl;
	}
}

 左右翻转:

#include<iostream>
using namespace std;
int main()
{
	int a[50][50];
	int num=1;
	int n=5,m=5;
	for(int i=1;i<=5;i++){
	    for(int j=1;j<=5;j++){
			a[i][j]=num;
			num++;
		}
	}
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	cout<<"左右翻转"<<endl;
	for(int i=1;i<=5;i++){
		for(int j=5;j>=1;j--){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	return 0;
}

上下翻转:
 

#include<iostream>
using namespace std;
int main()
{
	int a[50][50];
	int num=1;
	int n=5,m=5;
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			a[i][j]=num;
			num++;
		}
	}
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	cout<<"上下翻转"<<endl;
	for(int i=5;i>=1;i--){
		for(int j=1;j<=5;j++){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	return 0;
}

行列互换:

#include<iostream>
using namespace std;
int main()
{
	int a[50][50];
	int num=1;
	int n=5,m=5;
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			a[i][j]=num;
			num++;
		}
	}
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	cout<<"行列互换"<<endl;
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			cout<<a[j][i]<<"\t";
		}
		cout<<endl;
	}
	return 0;
}