华为机试 二维数组操作(简单)

二维数组操作

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;
}

知识点: (条件)?是的输出:否的输出

全部评论

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务