定长数组我们在这里就不讨论了,想要知道如何定义定长数组的童鞋麻烦出门直走前面左转~
一、什么是动态数组
也就是在编译时无法确定数组长度,程序在运行时需要动态分配内存空间的数组,比如需要根据输入(cin>>n)中的n来确定的数组长度。此时,你不能这样:
int arr[n]; // error: C2057: 应输入常量表达式
否则C++编译器必然会报错说len的大小不能确定,因为这种申明数组的方式默认了数组的大小需要在编译时确定;同时你也不能这样:
int arr[] = new int[n]; //error: C2440: “初始化”: 无法从“int *”转换为“int []”
编译器会说不能将int*型转为int[]型,因为用new开辟的内存空间都会返回这段内存的首地址,所以应该这样写:
int *arr = new int[n];
二、定义数组
1、定义一维数组
法1:
int *p = new int[n];
法2:
vector<int> arr(n,0);//若使用法二需要引入头文件 #include <vector>
2、定义二维数组
法一(双指针法,此方法比较麻烦):
先定义一个指向指针的指针p:
int **p = new int*[n];
然后对每个*p申请一组内存空间:
for(int i=0;i<n;i++) p[i] = new int[m];
法二:
<vector <vector<int>> arr(n,vector<int>(m,0));//初始化为0
3、三维数组以此类推
由于时间关系在此只给出vector方式的定义:vector<vector<vector<int>>> arr(m,vector<vector<int>>(n,vector<int>(l)));//暂未初始化
#下面附上2016年网易的一个采蘑菇的真题0.0#想歪的憋说话,用心感受- –
题目内容:
[编程题]扫描透镜
在N*M的草地上,提莫种了K个蘑菇,蘑菇爆炸的威力极大,兰博不想贸然去闯,而且蘑菇是隐形的.只 有一种叫做扫描透镜的物品可以扫描出隐形的蘑菇,于是他回了一趟战争学院,买了2个扫描透镜,一个 扫描透镜可以扫描出(3*3)方格中所有的蘑菇,然后兰博就可以清理掉一些隐形的蘑菇. 问:兰博最多可以清理多少个蘑菇? (注:若方格中有多个蘑菇,扫描透镜以此只能扫出一个)
输入描述:
第一行三个整数:N,M,K,(1≤N,M≤20,K≤100),N,M代表了草地的大小; 接下来K行,每行两个整数x,y(1≤x≤N,1≤y≤M).代表(x,y)处提莫种了一个蘑菇. 一个方格可以种无穷个蘑菇.
输出描述:
输出一行,在这一行输出一个整数,代表兰博最多可以清理多少个蘑菇.
鄙人的解答(水平有限,喷子绕行~):
#include <iostream>
#include <vector>
#include <algorithm>
//#include <math.h>
using namespace std;
int main()
{
int N,M,K;
while(cin>>N>>M>>K){
if(N<3)N = 3;
if(M<3)M = 3;
vector<vector<int>> arr1(N,vector<int>(M,0));
vector<vector<int>> arr2;
int max_num = 0;
int x,y;
int max1 = 0,max2 = 0;
while(K-- > 0){
cin>>x>>y;
arr1[x-1][y-1]++;
}
// cout<<arr1[0][0]<<arr1[0][1]<<arr1[1][1]<<arr1[1][0]<<endl;
for(int i=0;i<N-2;i++){
for(int j=0;j<M-2;j++){
max1 = 0;
arr2 = arr1;
for(int k=i;k<i+3;k++){
for(int l=j;l<j+3;l++){
if(arr2[k][l]>0){
arr2[k][l]--;
max1++;
}
}
}
for(int m=0;m<N-2;m++){
for(int n=0;n<M-2;n++){
max2 = 0;
for(int k=m;k<m+3;k++){
for(int l=n;l<n+3;l++){
if(arr2[k][l]>0){
max2++;
}
}
}
max_num = max(max_num,max1+max2);
}
}
}
}
cout<<max_num<<endl;
}
return 0;
}//答案正确:恭喜!您提交的程序通过了所有的测试用例
#今天的心情也是大起大落,徘徊在“宝宝心里苦,但并没卵用”及“卧槽,宝宝似乎很开心”中,感觉要精神分裂了有木有~~人还是复杂,单单是这点,阿法狗要追上人类,目测还得要个几十年啊哈哈哈哈。似乎跑题了- -!总结就到这里,不知道你有没有get到新的知识呢#