C++二维数组超详全解!认识二维数组及其特点,学会分析下标之间的关系。超全超详细,层层递进,逐一解析。

首先,抱歉拖更了1个多月,其次,为了让程序的结构更加明确,我将会把代码写得更紧凑些,希望不影响观看,谢谢。。。

目录

一、认识二维数组及其特点

二、学会分析下标之间的关系

一、认识二维数组及其特点

一维数组只是一条数据,不能进行分类或表示更多意义。二维数组则是一张表格,可以存储分类跟多数据意义也随之增加

定义:数据类型(typename) 数组名[行数][列数],……,……;

和一维数组相比只是多了一个[行数]

一定要注意:二维数组的下标一般用“数对”表示,不过是先行后列!先行后列!先行后列!(重要的事情说三遍),如上图。还有,二维数组的下标也是从0开始(也可以忽略第0行,或第0列)

一般输入时,要先输入行数和列数(n和m),输入输出时,二维数组就要用双重循环

注意!二维数组做函数参数时要这么写:

二、学会分析下标之间的关系

先是一道例题。。。

输入一个行数,再输入两个正方形数组a和b。判断如果a数组等于b数组,输出0;如果a数组向右旋转90°等于b数组,则输出1;如果a数组向右旋转180°等于b数组,则输出2;如果a数组向右旋转270°等于b数组,则输出3;否则都不满足,则输出-1。

代码:

这道题的关键就是要做到向右旋转。下标之间一定是有关系的,我们如何知道它们之间的关系,可以用“代入模拟法”(自己取的)。

 变化如下:

 所以,

 向右旋转180°、270°的方法也可以用“代入模拟法”做出来,当然也可以看成旋转2或3次90°时间复杂度可能会比较高)。

代码:

 最后用main函数调用一下:

 OK啦!!!

代码:

#include<bits/stdc++.h>
using namespace std;
void input(int a[][25],int n){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>a[i][j];
}
bool check1(int a[][25],int b[][25],int n){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(a[i][j]!=b[i][j])
				return 0;
	return 1;
}
bool check2(int a[][25],int b[][25],int n){
	int c[25][25];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			c[j][n-i+1]=a[i][j];
	if(check1(c,b,n))
		return 1;
	return 0;
}
bool check3(int a[][25],int b[][25],int n){
	int c[25][25];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			c[n-i+1][n-j+1]=a[i][j];
	if(check1(c,b,n))
		return 1;
	return 0;
}
bool check4(int a[][25],int b[][25],int n){
	int c[25][25];
	for(int i=1;i<=n;i++)	
		for(int j=1;j<=n;j++)	
			c[n-j+1][i]=a[i][j];
	if(check1(c,b,n))
		return 1;
	return 0;
}
int main(){
	int a[25][25],b[25][25];
	int n;
	cin>>n;
	input(a,n);
	input(b,n);
	if(check1(a,b,n))
		cout<<0;
	else if(check2(a,b,n))
		cout<<1;
	else if(check3(a,b,n))
		cout<<2;
	else if(check4(a,b,n))
		cout<<3;
    else
        cout<<-1;
	return 0;
}

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值