首页 > 试题广场 >

二维数组操作

[编程题]二维数组操作
  • 热度指数:98894 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个大小的数据表,你会依次进行以下5种操作:
1.输入,初始化大小的表格。
2.输入x_1y_1x_2y_2,交换坐标在(x_1,y_1)(x_2,y_2)的两个数。
3.输入,在第上方添加一行。
4.输入,在第左边添加一列。
5.输入,查找坐标为的单元格的值。

请编写程序,判断对表格的各种操作是否合法。

详细要求:

1.数据表的最大规格为9行*9列,对表格进行操作时遇到超出规格应该返回错误。
2.对于插入操作,如果插入后行数或列数超过9了则应返回错误。如果插入成功了则将数据表恢复至初始化的大小,多出的数据则应舍弃。

3.所有输入坐标操作,对大小的表格,行号坐标只允许0~m-1,列号坐标只允许0~n-1。超出范围应该返回错误。

本题含有多组样例输入!行列从0开始标号
数据范围:数据组数:
进阶:时间复杂度:,空间复杂度:

输入描述:

输入数据按下列顺序输入:
1 表格的行列值
2 要交换的两个单元格的行列值
3 输入要插入的行的数值
4 输入要插入的列的数值
5 输入要查询的单元格的坐标



输出描述:

输出按下列顺序输出:
1 初始化表格是否成功,若成功则返回0, 否则返回-1
2 输出交换单元格是否成功
3 输出插入行是否成功
4 输出插入列是否成功
5 输出查询单元格数据是否成功

示例1

输入

4 9
5 1 2 6
0
8
2 3
4 7
4 2 3 2
3
3
4 7

输出

0
-1
0
-1
0
0
-1
0
0
-1

说明

本组样例共有2组样例输入。
第一组样例:
1.初始化数据表为4行9列,成功
2.交换第5行1列和第2行6列的数据,失败。因为行的范围应该是(0,3),不存在第5行。
3.在第0行上方添加一行,成功。
4.在第8列左边添加一列,失败。因为列的总数已经达到了9的上限。
5.查询第2行第3列的值,成功。
第二组样例:
1.初始化数据表为4行7列,成功
2.交换第4行2列和第3行2列的数据,失败。因为行的范围应该是(0,3),不存在第4行。
3.在第3行上方添加一行,成功。
4.在第3列左边添加一列,成功。
5.查询第4行7列的值,失败。因为虽然添加了一行一列,但数据表会在添加后恢复成4行7列的形态,所以行的区间仍然在[0,3],列的区间仍然在[0,6],无法查询到(4,7)坐标。       
这题从头到尾都是在判断输入数据是否大于索引或者最大值9。。。这考察有啥意思啊?是考察我阅读能力么?
def change(x1,y1,x2,y2,m,n):
    if x1 >= m or x2 >= m or y1 >= n or y2 >= n:
        return -1
    return 0

def insert(s,m):
    if s >= m or m + 1 > 9:
        return -1
    return 0

def find(x,y):
    if x >= m or y >= n:
        return -1
    return 0
        
while True:
    try:
        s = input()
        m,n = map(lambda x: int(x.strip()) ,s.strip().split(' '))
        if m > 9 or n > 9:
            print(-1)
            continue
        else:
            print(0)
        s = input()
        x1, y1, x2, y2 = map(lambda x: int(x.strip()) ,s.strip().split(' '))
        print(change(x1, y1, x2, y2, m, n))
        
        h = int(input())
        print(insert(h, m))
        
        v = int(input())
        print(insert(v, n))
        
        s = input()
        x, y = map(lambda x: int(x.strip()) ,s.strip().split(' '))
        print(find(x, y))
    except:
        break
        

发表于 2021-05-28 15:23:43 回复(0)
不懂二维数组,只懂判断输入
while True:
    try:
        m,n=map(int,input().split())
        if 0<m<=9 and 0<n<=9:
            print(0)
        else:
            print(-1)
        m1,n1,m2,n2=map(int,input().split())
        if 0<=m1<m and 0<=m2<m and 0<=n1<n and 0<=n2<n:
            print(0)
        else:
            print(-1)
        x=int(input())
        if 0<=x<m and m!=9:
            print(0)
        else:
            print(-1)
        y=int(input())
        if 0<=y<n and n!=9:
            print(0)
        else:
            print(-1)
        m3,n3=map(int,input().split())
        if 0<=m3<m and 0<=n3<n:
            print(0)
        else:
            print(-1)
    except:
        break

发表于 2021-03-17 11:33:00 回复(0)
看了题目一脸闷逼,过来看讨论,恩,发现不是我一个人的问题

题目本身不难,其实就是慢慢读懂题意,做一点改一点,最后终于搞完了,
就是步骤很多,其实很简单


if __name__ == '__main__':
    while True:
        try:
            m_n=raw_input()
            m=int(m_n.split(' ')[0])
            n=int(m_n.split(' ')[1])
            if (m >= 1 and m <= 9) and (n >= 1 and n <= 9):
                print 0
                x1_y1_x2_y2 = raw_input()
                
                x1=  int(x1_y1_x2_y2.split(' ')[0])
                y1=  int(x1_y1_x2_y2.split(' ')[1])
                x2=  int(x1_y1_x2_y2.split(' ')[2])
                y2=  int(x1_y1_x2_y2.split(' ')[3])
                
                if (x1<m and x1>=0) and (x2 <m and x2>=0) and (y1<n and y1>=0) and (y2 <n and y2>=0):
                    print 0
                else:
                    print -1
                insert = int(input())
                if insert>=0 and (insert <m)  and (m<9):
                    print 0
                    flag_m =1
                    
                else:
                    print -1
                    flag_m =0
                    
                insert1 = int(input())
                if insert1>=0 and insert1 <n  and (n<9):
                    print 0
                    flag_n =1
                else:
                    print -1
                    flag_n =0
                
                r_l = raw_input()
                r = int(r_l.split(' ')[0])
                l = int(r_l.split(' ')[1])
#                 print r,m
#                 print l,n
                if (r>=0 and r<m) and (l>=0 and l<n):
                    print 0
                else:
                    print -1

            else:
                print -1
                break
        except:
            break

发表于 2021-03-12 11:07:49 回复(0)
while True:
    try:
        m, n = map(int, (input().split()))
        print(-1 if max(m, n) > 9 else 0 )
        x1, y1, x2, y2 = map(int, (input().split()))
        print(-1 if max(x1, x2)>m-1&nbs***bsp;max(y1, y2)>n-1 else 0)
        x, y = int(input()), int(input())
        print(-1 if m>8&nbs***bsp;x>m-1 else 0)
        print(-1 if n>8&nbs***bsp;y>n-1 else 0)
        x, y = map(int, (input().split()))
        print(-1 if x>m-1&nbs***bsp;y>n-1 else 0)
    except:
        break

发表于 2020-12-13 00:05:42 回复(0)
"""
根据评论区讨论和样例说明,简单总结下题目要进行的操作:
1,数据表行列范围都是[0,9].
2,交换的坐标行列数要在输入的表格大小行列数范围[0, m)x[0, n)内.
3,插入的 x 位置要在 [0, m) 范围内,插入的 y 位置要在 [0, n) 范围内.
4,要检查的位置 (x,y) 要在 [0, m)x[0, n) 内.

以上条件若满足输出'0',否则输出'-1'
"""

while True:
    try:
        # 数据表大小
        m, n = map(int, input().split())
        # 要交换的两个坐标位置
        x1, y1, x2, y2 = map(int, input().split())
        # 进行插入的行
        insert_x = int(input())
        # 进行插入的列
        insert_y = int(input())
        # 要查找的坐标位置
        x, y = map(int, input().split())
        
        # 1,数据表行列范围都是[0,9],若满足输出'0',否则输出'-1'
        if (0 <= m <= 9) and (0 <= n <= 9):
            print('0')
        else:
            print('-1')
        # 2,交换的坐标行列数要在输入的表格大小行列数范围[0, m)x[0, n)内
        if (0 <= x1 < m) and (0 <= y1 < n) and (0 <= x2 < m) and (0 <= y2 < n):
            print('0')
        else:
            print('-1')
        # 3.1,插入的x坐标要在 [0, m) 范围内
        if (0 <= insert_x < m) and (m < 9):
            print('0')
        else:
            print('-1')
        # 3.2,插入的y坐标要在 [0, n) 范围内
        if (0 <= insert_y < n) and (n < 9):
            print('0')
        else:
            print('-1')
        # 4,要检查的位置 (x,y) 要在 [0, m)x[0, n) 内
        if (0 <= x < m) and (0 <= y < n):
            print('0')
        else:
            print('-1')
    except:
        break
                  

发表于 2020-12-02 12:37:54 回复(0)
# 2020年11月14日19:39:23
while True:
    try:
#       操作1:输入表格的行列值,初始化表格
        row, column = map(int, input().split())
        if (0<=row<=9) and (0<=column<=9):
            print(0)
        else:
            print(-1)

#       操作2:交换两个单元格的行列值
        row1, column1, row2, column2 = map(int, input().split())
        condition1 = (0<=row1<=row-1) and (0<=column1<=column-1)
        condition2 = (0<=row2<=row-1) and (0<=column2<=column-1)
        condition3 = (row1!=row2)&nbs***bsp;(column1!=column2)
        if condition1 and condition2 and condition3:
            print(0)
        else:
            print(-1)

#       操作3:插入行
        insert_row = int(input())
        if (0<=insert_row<=row-1) and (0<=row+1<=9):
            print(0)
        else:
            print(-1)

#       操作4:插入列
        insert_column = int(input())
        if (0<=insert_column<=column-1) and (0<=column+1<=9):
            print(0)
        else:
            print(-1)       

#       操作5:获取单元格值
        get_row, get_column = map(int, input().split())
        if (0<=get_row<=row-1) and (0<=get_column<=column-1):
            print(0)
        else:
            print(-1)         
    except:
        break
        


编辑于 2020-11-14 20:30:56 回复(0)
while True:
    try:
        n, m = list(map(int, input().strip().split()))
        tmp = list(map(int, input().strip().split()))
        cell1 = tmp[:2]
        cell2 = tmp[2:]
        insert_row = int(input().strip())
        insert_col = int(input().strip())
        find_cell = list(map(int, input().strip().split()))
        if 1 <= n <= 9 and 1 <= m <= 9:
            print(0)
            if (0 <= cell1[0] <= n - 1 and 0 <= cell1[1] <= m - 1 and
                0 <= cell2[0] <= n - 1 and 0 <= cell2[1] <= m - 1):
                print(0)
            else:
                print(-1)
            if 0 <= insert_row < n - 1:
                print(0)
            else:
                print(-1)
            if 0 <= insert_col < m - 1:
                print(0)
            else:
                print(-1)
            if 0 <= find_cell[0] <= n - 1 and 0 <= find_cell[1] <= m - 1:
                print(0)
            else:
                print(-1)
        else:
            print(-1)
    except:
        break
        

发表于 2020-10-05 10:28:49 回复(0)
1、示例有问题, 1 1 0 1应该在一行;
2、初始化形成表格时,数字代表行、列的数量,后面的所有操作需要以0为初始索引计算,特别注意边界问题,否则会出错。
while True:
    try:
        rowLength, columnLength = list(map(int, input().split()))
        if 0 < rowLength <= 9 and 0 < columnLength <= 9:
            print(0)
        else:
            print(-1)
        rowMove1, columnMove1, rowMove2, columnMove2 = list(map(int, input().split()))
        if 0 <= rowMove1 < rowLength and 0 <= columnMove1 < columnLength and 0 <= rowMove2 < rowLength and 0 <= columnMove2 < columnLength:
            print(0)
        else:
            print(-1)
        rowInsert = int(input())
        if 0 <= rowInsert < rowLength and rowLength < 9:
            print(0)
        else:
            print(-1)
        columnInset = int(input())
        if 0 <= columnInset < columnLength and columnLength < 9:
            print(0)
        else:
            print(-1)
        rowSearch, columnSearch = list(map(int, input().split()))
        if 0 <= rowSearch < rowLength and 0 <= columnSearch < columnLength:
            print(0)
        else:
            print(-1)
    except EOFError:
        break


发表于 2020-10-01 23:34:52 回复(0)
while True:
    try:
        n,m = map(int,input().strip().split())
        if (0 <= n <= 9) & (0 <= m <= 9):
            print(0)
        else:
            print(-1)
        
        n1,m1,n2,m2 = map(int,input().strip().split())
        if (0 <= n1 <= (n-1)) & (0 <= m1 <= (m-1)) & (0 <= n2 <= (n-1)) & (0 <= m2 <= (m-1)):
            print(0)
        else:
            print(-1)
            
        hang = int(input())
        if 0 <= hang <= n-1:
            if n == 9:
                print(-1)
            else:
                print(0)               
        else:
            print(-1)

        lie = int(input())
        if 0 <= lie <= m-1:
            if m == 9:
                print(-1)
            else:
                print(0)
        else:
            print(-1)  
#第三四问根据题目描述我认为应该是取<=n和<=m,但是只有现在这样才能通过测试...
        n3,m3 = map(int,input().strip().split())
        if (0 <= n3 <= (n-1)) & (0 <= m3 <= (m-1)):
            print(0)
        else:
            print(-1)               
    except:
        break
发表于 2020-09-09 00:47:39 回复(0)
大神求解答,是用例有问题吗?实在不知到哪里错了
while True:
    try:
        row_line = input().split()
        change1 = input().split()
        insert_row = int(input())
        insert_line = int(input())
        move = input().split()
        #初始化表格
        r1,l1 = list(map(int,row_line))
        if r1 < 10 and l1 < 10:
            print(0)
        else:
            print(-1)
        #交换单元格
        h1,h2,h3,h4 = list(map(int,change1))
        if h1 in range(0,r1) and h2 in range(0,l1) and h3 in range(0,r1) and h4 in range(0,l1):
             print(0)
        else:
             print(-1)
        #插入行
        if insert_row in range(0,r1):
            print(0)
        else:
            print(-1)
        #插入列
        if insert_line in range(0,l1):
            print(0)
        else:
            print(-1)
        #查询运动轨迹
        k1,k2=list(map(int,move))
        if k1 in range(0,r1) and k2 in range(0,l1):
            print(0)
        else:
            print(-1)
    except:
        break


发表于 2020-07-29 08:43:53 回复(1)
while 1:
    try:
        c1, c2, c3, c4, c5 = input(), input(), int(input()), int(input()), input()
        a1, b1 = tuple(map(int,c1.split()))
        if a1 <10 and b1<10:
            print(0)
        else:
            print(-1)
        a2, b2, c2, d2 = tuple(map(int,c2.split()))
        if (a2 in range(0,a1) and b2 in range(0,b1)) and (c2 in range(0,a1) and d2 in range(0,b1)):
            print(0)
        else:
            print(-1)
        if c3 in range(0,a1):
            print(0)
        else:
            print(-1) 
        if c4 in range(0,b1):
            print(0)
        else:
            print(-1)  
        a5, b5 = tuple(map(int,c5.split()))
        if a5 in range(0,a1) and b5 in range(0,b1):
            print(0)
        else:
            print(-1) 

    except:
        break
shawanyier
发表于 2020-06-02 19:46:30 回复(0)
while True:
    try:
        m,n=list(map(int,input().split()))
        exchange=list(map(int,input().split()))
        insertrow=int(input())
        insertcol=int(input())
        trace=list(map(int,input().split()))
        res=[]
        if 0<=m<=9 and 0<=n<=9:
            res.append(0)
        else:
            res.append(-1)
        if 0<=exchange[0]<=m-1 and 0<=exchange[1]<=n-1 and 0<=exchange[2]<=m-1 and 0<=exchange[3]<=n-1:
            res.append(0)
        else:
            res.append(-1)
        if 0<=insertrow<=m-1:
            res.append(0)
        else:
            res.append(-1)
            
        if 0<=insertcol<=n-1:
            res.append(0)
        else:
            res.append(-1)
            
        if 0<=trace[0]<=m-1 and 0<=trace[1]<=n-1:
            res.append(0)
        else:
            res.append(-1)
            
        for i in res:
            print(i)
    except:
        break

发表于 2019-10-20 23:12:48 回复(1)
while True:
    try:
        col,index=map(int,input().strip().split(' '))
        #print(col,index)
        x1,y1,x2,y2=map(int,input().strip().split(' '))
        new_col=int(input().strip())
        new_index=int(input().strip())
        findx,findy=map(int,input().strip().split(' '))
        #array=[]
        #for i in range(col):
            #array.append([0]*index)
        #print(array)
        if col<=9 and index<=9:
            print('0')
        else:
            print('-1')
        if x1<col and y1<index and x2<col and y2<index:
            print('0')
        else:
            print('-1')
        if new_col<col:
            print('0')
        else:
            print('-1')
        if new_index<index:
            print('0')
        else:
            print('-1')
        if findx<col and findy<index:
            print('0')
        else:
            print('-1')
    except:
        break
发表于 2019-07-10 15:44:57 回复(0)
__author__ = 'Wicle'

def init(row, line):
    if 0<=row<=9 and 0<= line<=9:
        a = [[i for i in range(line)] for j in range(row)]
        print 0
        return a
    else:
        print -1

def exchange(a,source, dest):
    if 0<= source[0] < len(a) and 0<= source[1] < len(a[0]) and 0<= dest[0] < len(a) and 0<= dest[1] < len(a[0]):
        a[dest[0]][dest[1]],a[source[0]][source[1]] = a[source[0]][source[1]], a[dest[0]][dest[1]]
        return 0
    else:
        return -1


def insert_line(a,insert_l):
    if 0<=insert_l<len(a):
        a.insert(insert_l,[0 for i in range(len(a[0]))])
        return 0
    else:
        return -1


def insert_column(a, insert_col):
    if 0<=insert_col<len(a[0]):
        for i in range(len(a)):
            a[i].insert(insert_col,0)
        return 0
    else:
        return -1

def search(a,search_grid,row, line):
    if 0<= search_grid[0] < row and 0<= search_grid[1] < line:
        return 0
    else:
        return -1
while True:
    try:
        row, line = [int(x) for x in raw_input().split()]


        a=init(row,line)

        source = [int(x) for x in raw_input().split()]

        print exchange(a,source[0:2],source[2:])

        ins_line = int(raw_input())
        print insert_line(a, ins_line)

        ins_col = int(raw_input())
        print insert_column(a, ins_col)

        search_grid = [int(x) for x in raw_input().split()]
        print search(a, search_grid,row,line)
    except:
        break

这题目也是完全不知道在说什么
发表于 2016-08-31 21:47:38 回复(0)