赞
踩
首先,抱歉拖更了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;
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。