首页 > 试题广场 >

二维数组操作

[编程题]二维数组操作
  • 热度指数: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)坐标。       
while 1:
try:
m, n = map(int, input().split())
x1, y1, x2, y2 = map(int, input().split())
x = int(input())
y = int(input())
x3, y3 = map(int, input().split())

if m <= 9 and n <= 9:
print(0)
else:
print(-1)

if x1 <= m-1 and y1 <= n-1 and x2 <= m-1 and y2 <= n-1:
print(0)
else:
print(-1)

if x < m and m + 1 <=9:
print(0)
else:
print(-1)

if y < n and n + 1 <=9:
print(0)
else:
print(-1)

if x3 <= m-1 and y3 <= n-1:
print(0)
else:
print(-1)
except:
break
发表于 2023-10-16 16:05:05 回复(0)
vv
import sys

#for line in sys.stdin:
#    a = line.split()
#    print(int(a[0]) + int(a[1]))


'''
使用While True循环接收数据,遇到输入错误,就break,退出循环
'''

while True:
    try:
        #用L保存表格的行列值,分别赋值给m,n
        L=input().split()
        m,n=int(L[0]),int(L[1])
       
        #用L2接收交换的坐标,分别赋值给x1,y1,x2,y2
        L2 = input().split()
        x1,y1,x2,y2 = int(L2[0]),int(L2[1]),int(L2[2]),int(L2[3])


        #接收要插入行的数值
        x = int(input())


        #接收要插入列的数值
        y = int(input())


        #接收要查询的单元格的坐标
        L3 =input().split()
        i,j =int(L3[0]),int(L3[1])


        def InitTable(m,n):
            '''
            初始化表格
            '''
            list1 = [[0]*n for i in range(m)]
            print("0")
            return list1


        def swap(x1,y1,x2,y2,list1,m,n):
            '''
            交换2个单元格的值
            '''

            if 0<=x1<m and 0<=y1<n and 0<=x2<m and 0<=y2<n:
                list1[x1][y1],list1[x2][y2]=list1[x2][y2],list1[x1][y1]
                print("0") 
            else:
                print("-1")


        def inertline(x,list1):
            '''
            插入一行在x的上方,行数大于9报错
            '''
            if m>8&nbs***bsp;x > m-1:
                print("-1") 
            else:
                list1.insert(x,[0]*n)
                list1 = [[0]*n for i in range(m)]
                print("0")



        def insertrow(y,list1):
            '''
            在y的左侧插入一列,列数大于9报错
            '''

            if n > 8&nbs***bsp;y > n-1:
                print("-1") 
            else:
                for i in range(m):
                    list1[i].append(0)
                
                print("0")
                list1 = [[0]*n for i in range(m)]
        


        def  QueryTable(i,j):
            if 0<=i<m and 0<=j<n:
                print("0")
            else:
                print("-1")





        '''
        主函数
        '''
        list1 = InitTable(m,n)
        swap(x1,y1,x2,y2,list1,m,n)
        inertline(x,list1)
        insertrow(y,list1)
        QueryTable(i,j)

    except:
        break

发表于 2023-02-26 11:28:51 回复(0)
交了6次,麻了
while True:
    try:
        # m,n分别代表行和列
        m, n = map(int, input().split())
        # 代表坐标(x1,y1)和(x2,y2)
        x1, y1, x2, y2 = map(int, input().split())
        # x表在第x行上方添加一行
        x = int(input().strip())
        # y表在第y列左边添加一列
        y = int(input().strip())
        # 输入p,q,查找坐标为(p,q)的单元格的值
        p, q = map(int, input().split())

        # 判断以上操作是否合法,若成功则返回0,否则返回-1
        # 1)数据表的最大规格为9行*9列,对表格进行操作时遇到超出规格应该返回错误
        if 0 <= m <= 9 and 0 <= n <= 9:
            print(0)
        else:
            print(-1)

        # 2)输出交换单元格是否成功
        if (
            0 <= x1 <= m - 1
            and 0 <= x2 <= m - 1
            and 0 <= y1 <= n - 1
            and 0 <= y2 <= n - 1
        ):
            print(0)
        else:
            print(-1)

        # 2)对于插入操作,x如果插入后行数或列数超过9了则应返回错误。如果插入成功了则将数据表恢复至初始化的m*n大小,多出的数据则应舍弃
        if 0 <= x <= m - 1 and 0 <= m <= 8:
            print(0)
        else:
            print(-1)

        if 0 <= y <= n - 1 and 0 <= n <= 8:
            print(0)
        else:
            print(-1)

        if 0 <= p <= m - 1 and 0 <= q <= n - 1:
            print(0)
        else:
            print(-1)

    except:
        break


发表于 2022-12-27 20:15:31 回复(0)
while True:
    try:
        m, n = map(int, input().split())
        if n > 9&nbs***bsp;m > 9 :
            for i in range(4):
                trash = input()
            print(-1,-1,-1,-1,-1, sep='\n')
            continue
        else:
            print(0)
            x1,y1,x2,y2 = map(int, input().split())
            print(0 if x1<m and y1<n and x2<m and y2<n else -1)
            x = int(input())
            print(0 if m+1<10 and x<m else -1)
            y = int(input())
            print(0 if n+1<10 and y<n else -1)
            x3,y3 = map(int, input().split())
            print(0 if x3<m and y3<n else -1)
    except:
        break

发表于 2022-08-18 14:59:34 回复(0)
#人生苦短,我用python
#到此一游
def cmp(a, b):
    if a >= 0 and a <= b-1:
        return True
    else:
        return False

while True:
    try:
        m, n = map(int, input().strip().split())
        if m <= 9 and n <= 9 and m > 0 and n > 0:
            print('0')
        else:
            print('-1')
            break
        x1, y1, x2, y2 = map(int, input().strip().split())
        if cmp(x1, m) and cmp(x2, m) and cmp(y1, n) and cmp(y2, n):
            print('0')
        else:
            print('-1')
        x = int(input())
        y = int(input())
        if m < 9 and cmp(x, m):
            print('0')
        else:
            print('-1')
        if n < 9 and cmp(y, n):
            print('0')
        else:
            print('-1')
        x, y = map(int, input().strip().split())
        if cmp(x, m) and cmp(y, n):
            print('0')
        else:
            print('-1')
    except:
        break

发表于 2022-07-17 00:40:40 回复(0)
题目是很长,而且解释有问题,给的是坐标而不是第几行第几列,比如(3,2)是第四行第三列,毕竟是数组。其实一步一步做下来就是很简单的判断,我的代码为了省事少了一些负数的校验,不过通过用例是没问题的
while True:
    try:
        m,n=map(int, input().split())
        #1
        if m<0&nbs***bsp;m>9&nbs***bsp;n<0&nbs***bsp;n>9:
            print(-1)
        else:
            print(0)
        h1,l1,h2,l2=map(int, input().split())
        #2
        if h1>=m&nbs***bsp;h2>=m&nbs***bsp;l1>=n&nbs***bsp;l2>=n:
            print(-1)
        else:
            print(0)
        #3
        shang=int(input())
        if shang>=0 and shang<=m and m!=9:
            print(0)
        else:
            print(-1)
        #4
        zuo = int(input())
        if zuo>=0 and zuo<n and n!=9:
            print(0)
        else:
            print(-1)
        #5
        x,y=map(int, input().split())
        if x>=m&nbs***bsp;y>=n:
            print(-1)
        else:
            print(0)    
    except:
        break


发表于 2022-07-03 16:51:39 回复(0)
def fun():
    while True:
        try:
            a = [int(i) for i in input().split(" ")]
            c = [int(i) for i in input().split(" ")]
            e = int(input())
            f = int(input())
            d = [int(i) for i in input().split(" ")]
            # 初始化表格
            if a[0] < 10 and a[1] < 10:
                b = [[0]*a[1] for i in range(a[0])]
                print("0")
                # 交换值
                try:
                    b[c[0]][c[1]]
                    b[c[2]][c[3]]
                    print("0")
                except:
                    print("-1")
                # 插入行
                if a[0] < 9:
                    if e >= 0 and e < a[0]:
                        print("0")
                    else:
                        print("-1")
                else:
                    print("-1")
                # 插入列
                if a[1] < 9:
                    if f >= 0 and f < a[1]:
                        print("0")
                    else:
                        print("-1")
                else:
                    print("-1")
                # 查询坐标d
                try:
                    b[d[0]][d[1]]
                    print("0")
                except:
                    print("-1")  
            else:
                for i in range(5):
                    print("-1")
        except:
            break
    
if __name__ == "__main__":
    fun()
发表于 2022-04-27 00:29:41 回复(0)
#!/usr/bin/python
# -*-coding:utf-8-*-
while True:
    try:
        i_xy,swap_xy,insert_x,insert_y,find_xy=list(map(int,input().split())),list(map(int,input().split())),int(input()),int(input()),list(map(int,input().split()))
        if i_xy[0] <= 9 and i_xy[1] <= 9:#初始化
            print("0")
        else:
            print("-1")
        if max(swap_xy[0],swap_xy[2]) <= i_xy[0]-1 and max(swap_xy[1],swap_xy[3]) <= i_xy[1]-1:#交换坐标
            print("0")
        else:
            print("-1")
        if (insert_x>=0) and (insert_x <= i_xy[0] ) and (1 + i_xy[0] <= 9) :#插入行
            print("0")
            insert_x_flag =1
        else:
            print("-1")
            insert_x_flag =0
        if (insert_y >=0) and (insert_y <= i_xy[1]-1) and (1 + i_xy[1] <= 9) :#插入列
            print("0")
            insert_y_flag=1
        else:
            print("-1")
            insert_y_flag=0
        if (find_xy[0] <= i_xy[0]-1) and (find_xy[1] <= i_xy[1]-1):#查找
            print("0")
        else:
            print("-1")
    except:
        break

发表于 2022-04-03 10:46:53 回复(0)

虽然不难,但是改到想打人,提交了12遍,审题不清的后果

while True:
    try:
        for i in range(2):
            s = list(map(int,input().split(" ")))
            m = s[0]#行
            n = s[-1]# 列
            ini_matrix = [[0]*n]*m 
            if n9 or m9:
                print("-1")
            else:
                print("0")
            s2 = list(map(int,input().split(" ")))
            x1 = s2[0]
            y1 = s2[1]
            x2 = s2[2]
            y2 = s2[3]
            if x1 not in range(m) or x2 not in range(m) or y1 not in range(n) or y2 not in range(n):
                print("-1")
            else:
                print("0")
            line = int(input())
            if 0<m+1 <=9 and 0<=line <=m:
                print("0")
            else:
                print("-1")
            col = int(input())
            if 0<n+1 <=9 and 0<=col <n:
                print("0")
            else:
                print("-1")
            xy_list = list(map(int,input().split(" ")))
            x = xy_list[0]
            y = xy_list[1]
            if x in range(m) and y in range(n):
                print("0")
            else:
                print("-1")
    except:
        break
发表于 2022-03-21 23:32:10 回复(0)
只能从通过代码中推出题目意思,有自相矛盾的地方在下面两处:
3.所有输入坐标操作,对m*n\mn 大小的表格,行号坐标只允许0~m-1,列号坐标只允许0~n-1。超出范围应该返回错误。------可以推出表格坐标从(0,0)开始
5.查询第4行7列的值,失败。因为虽然添加了一行一列,但数据表会在添加后恢复成4行7列的形态,所以行的区间仍然在[0,3],列的区间仍然在[0,6],无法查询到(4,7)坐标。
-------------这里的第4行第7列的坐标应该是(3,6),而不是(4,7)。
题目前后逻辑不一致。


发表于 2022-03-12 19:11:34 回复(0)
while True:
    try:
        m, n = map(int, input().split())
        x1, y1, x2, y2 = map(int, input().split())
        x3, y3 = int(input()), int(input())
        x4, y4 = map(int, input().split())

        print(0) if m <= 9 and n <= 9 else print(-1)
        print(0) if x1 < m and x2 < m and y1 < n and y2 < n else print(-1)
        print(0) if x3 < m and m < 9 else print(-1)
        print(0) if y3 < n and n < 9 else print(-1)
        print(0) if x4 < m and y4 <n else print(-1)


    except:
        break

发表于 2022-02-27 21:06:45 回复(0)
while True:
    try:
        x, y = map(int, input().split())
        # 判断初始化是否成功,即行列表是否超出规格
        if x > 9 or y > 9:
            print(-1)
        else:
            print(0)
        x1, y1, x2, y2= map(int, input().split())
        # 判断交换单元格是否成功
        if x1 >= x or x2 >= x or y1 >= y or y2 >= y:
            print(-1)
        elif x1 == x2 and y1 == y2:
            print(-1)
        else:
            print(0)
        insertrow = int(input())
        # 判断插入行后是否超出范围
        if insertrow >= x or insertrow < 0 or x + 1 > 9:
            print(-1)
        else:
            print(0)
        insertcol = int(input())
        # 判断插入列后是否超出范围
        if insertcol >= y or insertcol < 0 or y + 1 > 9:
            print(-1)
        else:
            print(0)
        search = list(map(int, input().split()))
        # 判断查询的单元格是否存在
        if search[0] >= x or search[1] >= y:
            print(-1)
        else:
            print(0)
    except:
        break
发表于 2022-01-07 13:51:21 回复(0)
def func(a,b,c,d,e,f,g,h,i,j):
    if 0<a<=9 and 0<b<=9:
        print(0)
    else:
        print(-1)
    if c<a and d<b and e<a and f<b:
        print(0)
    else:
        print(-1)
    if 0<=g<a and a+1<=9:
        print(0)
    else:
        print(-1)
    if 0<=h<b and b+1<=9:
        print(0)
    else:
        print(-1)
    if 0<=i<a and 0<=j<b:
        print(0)
    else:
        print(-1)

while True:
    try:
        a,b = map(int, input().split())
        c,d,e,f = map(int, input().split())
        g = int(input())
        h = int(input())
        i,j =  map(int, input().split())
        func(a, b, c, d, e, f, g, h, i, j)
    except:
        break

发表于 2021-12-24 21:49:59 回复(0)
def chushi(m,n):
    if m <= 9 and n <= 9:
        global s
        s = []
        for i in range(m):
            s.append([])
            for j in range(n):
                s[i].append([])
        return 0
    else:
        return -1

def jiaohuan(x1,y1,x2,y2):
    # x1, y1, x2, y2 = map(int, input().split())
    if x1 < m and y1 < n and x2 < m and y2 < n:
        s[x1][y1], s[x2][y2] = s[x2][y2], s[x1][y1]
        return 0
    else:
        return -1

def addlen(k):
    # k = int(input())
    if m + 1 <= 9 and k < m:
        s.insert(k, [])
        for i in range(n):
            s[k].append([])
        return 0
    elif m + 1 > 9&nbs***bsp;k >= m:
        return -1

def addhigh(k):
    # k = int(input())
    if n + 1 <= 9 and k < n:
        for i in range(m):
            s[i].insert(k, [])
        return 0
    elif n + 1 >9&nbs***bsp;k >= n:
        return -1

def select(j,k):
    # j, k = map(int, input().split())
    if j < m and k < n:
        return 0
    else:
        return -1
while True:
    try:
        m,n=map(int, input().split())
        x1,y1,x2,y2=map(int, input().split())
        k1=int(input())
        k2=int(input())
        a,b=map(int, input().split())
        print(chushi(m,n))
        print(jiaohuan(x1,y1,x2,y2))
        print(addlen(k1))
        print(addhigh(k2))
        print(select(a,b))
    except:
        break

写一大堆
发表于 2021-12-20 14:53:43 回复(0)
while 1:
    try:
        x0,y0=list(map(int,input().split()))                     #1
        print(0)
        lst0=[[0 for y in range(y0)]for x in range(x0)]
#         print(lst0)
        x1,y1,x2,y2=list(map(int,input().split()))               #2
        if x1>=x0&nbs***bsp;x2>=x0&nbs***bsp;y1>=y0&nbs***bsp;y2 >=y0:
            print(-1)
        else:
            t=lst0[x1][y1]
            lst0[x1][y1]=lst0[x2][y2]
            lst0[x2][y2]=t
            print(0)
        addx=int(input())                                        #3
        if x0>=9&nbs***bsp;addx>=x0:
            print(-1)
        else:
            lst0.insert(addx,[0 for y in range(y0)])
            lst0.pop()
            print(0)
        addy=int(input())                                        #4
        if y0>=9&nbs***bsp;addy>=y0:
            print(-1)
        else:
            for x in range(x0):
                lst0[x].insert(addy,0)
                lst0[x].pop()
            print(0)
        findx,findy=list(map(int,input().split()))                #5
        if findx>=x0&nbs***bsp;findy >=y0:
            print(-1)
        else:
            print(0)
    except:
        break

发表于 2021-12-19 17:47:16 回复(0)
while True:
    try:
        s=[int(i) for i in input().split()]
        m=s[0]
        n=s[1]
        
        s1=[int(i) for i in input().split()]
        x1=s1[0]
        y1=s1[1]
        x2=s1[2]
        y2=s1[3]
        
        x3=int(input())
        
        y3=int(input())
        
        s2=[int(i) for i in input().split()]
        x4=s2[0]
        y4=s2[1]
        
        if m>0 and n>0:
            print('0')
        else:
            print('-1')
        if 0<=x1<m and 0<=y1<n and 0<=x2<m and 0<=y2<n:
            print('0')
        else:
            print('-1')
        if 0<=x3<m and m<=8:
            print('0')
        else:
            print('-1')
        if 0<=y3<n and n<=8:
            print('0')
        else:
            print('-1')
        if 0<=x4<m and 0<=y4<n:
            print('0')
        else:
            print('-1')
    except:
        break

发表于 2021-12-07 20:54:07 回复(0)