华为机试 二维数组操作(简单)
二维数组操作
http://www.nowcoder.com/questionTerminal/2f8c17bec47e416897ce4b9aa560b7f4
输入描述:
输入数据按下列顺序输入:
1 表格的行列值
2 要交换的两个单元格的行列值
3 输入要插入的行的数值
4 输入要插入的列的数值
5 输入要查询的单元格的坐标
输出描述:
输出按下列顺序输出:
1 初始化表格是否成功,若成功则返回0, 否则返回-1
2 输出交换单元格是否成功
3 输出插入行是否成功
4 输出插入列是否成功
5 输出查询单元格数据是否成功
方法1:写了个类,把需要的函数都放进去
题目不难,就是读着很绕口。
1 表格的行列值
判断是否小于等于9行9列
2 要交换的两个单元格的行列值
判断两个单元格的坐标是否超出m行n列(注意是0开始算起的,0 ~ m-1, 0 ~ n-1)
3 输入要插入的行的数值
判断输入值是否超出m行 x<0||x>m-1
判断是否当前列表行数已满(9行不能再添加)m>8
4 输入要插入的列的数值
同3
5 输入要查询的单元格的坐标
同2
#include<iostream> #include<vector> using namespace std; class solution{ public: int initialization(int m,int n); int change(int x1,int y1,int x2,int y2); int insert_row(int x); int insert_col(int y); int find(int x,int y); private: int m,n; vector<vector<int>> data; }; //输入m和n,初始化m*n大小的表格。 int solution::initialization(int m,int n){ if(m<=0||m>9||n<=0||n>9) return -1; this->m=m; this->n=n; data.resize(m); for(int i=0;i<m;i++) { data[i].resize(n); } return 0; } //输入x1,y1,x2,y2,交换坐标在(x1,y1),(x2,y2)的两个数 int solution::change(int x1,int y1,int x2,int y2){ if(x1<0||x1>m-1||x2<0||x2>m-1||y1<0||y1>n-1||y2<0||y2>n-1) return -1; swap(data[x1][y1],data[x2][y2]); return 0; } //输入x,在第x行左边添加一行 int solution::insert_row(int x){ if(x<0||x>m-1||m>8) //x超过现在行范围 或 现在已经达到9行(m=8)时fanh return -1; return 0; } //输入y,在第y行上方添加一列 int solution::insert_col(int y){ if(y<0||y>n-1||n>8) return -1; return 0; } //输入x,y,查找坐标为(x,y) int solution::find(int x,int y){ if(x<0||x>m-1||y<0||y>n-1) return -1; else return 0; } int main(){ solution s; int m,n,x1,y1,x2,y2,x,y,find_x,find_y; while(cin>>m>>n>>x1>>y1>>x2>>y2>>x>>y>>find_x>>find_y){ cout<<s.initialization(m,n)<<endl; cout<<s.change(x1,y1,x2,y2)<<endl; cout<<s.insert_row(x)<<endl; cout<<s.insert_col(y)<<endl; cout<<s.find(find_x,find_y)<<endl; } return 0; }
知识点:复习了下类的使用。
private里的变量只能通过本类的成员函数访问。
连续多组测试的另一种写法:while(cin>>m>>n>>x1>>y1>>x2>>y2>>x>>y>>find_x>>find_y)。
this可以区分类的私有成员和函数参数(如果同名的话)。
方法2:
只为满足题目要求,把上面的条件复制粘贴下来
#include<iostream> using namespace std; int main(){ int m,n,x1,y1,x2,y2,x,y,find_x,find_y; while(cin>>m>>n>>x1>>y1>>x2>>y2>>x>>y>>find_x>>find_y){ cout<<((m<=0||m>9||n<=0||n>9)?-1:0)<<endl; cout<<((x1<0||x1>m-1||x2<0||x2>m-1||y1<0||y1>n-1||y2<0||y2>n-1)?-1:0)<<endl; cout<<((x<0||x>m-1||m>8)?-1:0)<<endl; cout<<((y<0||y>n-1||n>8)?-1:0)<<endl; cout<<((find_x<0||find_x>m-1||find_y<0||find_y>n-1)?-1:0)<<endl; } return 0; }
知识点: (条件)?是的输出:否的输出