数组
知识点
一维数组的初始化,赋值
二维数组初始化 赋值
字符数组
函数以数组为形参
排序
查找
解决问题
数据量较大需要定义很多变量,此时可以用数组来代替
对大数进行倒置等操作可以用字符数组
个人理解
严重注意定义数组不能用变量作为数组长度 可以用宏 并且定义数组的长度尽量大
数组所存的数据类型必须相同 字符数组虽然数字字符都可以存但都是以其ascII码的形式存储
对数组操作时要找到整体数据的规律如 变换的矩阵
数组下标从0开始 如定义a[10],则实际上数组下标是从0到9因此需注意,而且数组被分配的空间是连续的如果不注意对a[10]进行了操作(a[10]没有被定义)数组越界就有可能改变其他的变量造成严重后果
函数调用一维数组只写数组名即可下标可以不写(若写了在编译时只会检测其是否为正若为正则忽略)所以只写数组名即可
排序 冒泡 插入 选择 通过记录数组最大的下标然后交换 也可以用sort函数(默认从小到大)若从大到小应定义一个函数 如
int comp(int a,int b)
{
return a>b;
}
加在sort中
查找 顺序查找将数组遍历一遍 二分查找极大的缩短了查找的时间 但是是用之前一定要将数组之中的数字排序
打表
将预先要用的数据计算好存在数组中需要时将其调出来既可 如素数 因数 斐波那契数列
数组的初始化中memest是对数组清零的方法用法
memest(数组名,0,sizeof(数组名))
在字符数组输入的时候要注意scanf get getline cin.get的用法及特点并且一维字符数组在存储字符串的时候自动的在末尾加’\0’(也可自己加),
数组下标的用法 如桶排序将要排序的数字作为下标而数组元素则存该数字出现了几次
二维数组 在使用时要注意第二维的长度不可省略特别在函数调用 在给二维数组分配空间时也是连续的首先给第一行分配(因此需要知道第一行有多长也就是第二维)不然无法分配下几行
以上 均属个人见解如有错误敬请评论斧正一定及时改进
再此附上 变换的矩阵 为例
有一个N x N(N为奇数,且1 <= N <= 10)的矩阵,矩阵中的元素都是字符。这个矩阵可能会按照如下的几种变幻法则之一进行变幻(只会变幻一次)。
现在给出一个原始的矩阵,和一个变幻后的矩阵,请编写一个程序,来判定原始矩阵是按照哪一种法则变幻为目标矩阵的。
- 按照顺时针方向旋转90
2 按照逆时针方向旋转90
3 中央元素不变,其他元素与“以中央元素为中心的对应元素”互换;
4 保持原始矩阵,不变幻;
5如果 从原始矩阵 到 目标矩阵 的变幻,不符合任何上述变幻,请输出5
输入
第一行:矩阵每行/列元素的个数 N;
第二行到第N+1行:原始矩阵,共N行,每行N个字符;第N+2行到第2*N+1行:目标矩阵,共N行,每行N个字符;
输出
只有一行,从原始矩阵 到 目标矩阵 的所采取的 变幻法则的编号。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
char a[11][11],b[11][11];
int n,s=0,q=0,w=0,h=0;
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=1;j<=n;++j)
{cin>>b[i][j];
if(a[i][j]==b[i][j])
s++;\\不变的情况\\
}
for(int i=1;i<=n;++i)
{for(int j=1;j<=n;++j)
{
if(a[i][j]==b[n-i+1][n-j+1])
{
w++;
} \\中心对称的情况\\
if(a[i][j]==b[j][n-i+1])
{
q++;
}\\顺时针的情况\\
if(a[i][j]==b[n-j+1][i])
{
h++;
}\\逆时针的情况\\
}}
if(s==n*n)
cout<<4;
else if(q==n*n)
cout<<1;
else if(h==n*n)
cout<<2;
else if(w==n*n)
cout<<3;
else cout<<5;
cout<<endl;
return 0;
}