列表

详情


HJ83. 二维数组操作

描述

有一个大小的数据表,你会依次进行以下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)坐标。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 308KB, 提交时间: 2020-07-08

#include <stdio.h>
int main()
{
    int a[9][9];
    int m,n;
    while(scanf("%d %d\n",&m,&n)!=EOF)
    {
        if(m>0&&m<=9&&n>0&&n<=9)
        {
            printf("0\n");
            int a,b,c,d;
            scanf("%d %d %d %d\n",&a,&b,&c,&d);
                if(a>=0&&a<m&&b>=0&&b<n
                   &&c>=0&&c<m&&d>=0&&d<n)
                    printf("0\n");
            else
                printf("-1\n");
            int e,f;
            scanf("%d\n",&e);
            if(e<m)
                printf("0\n");
            else
                printf("-1\n");
            scanf("%d\n",&f);
            if(f<n)
                printf("0\n");
            else
                printf("-1\n");
            scanf("%d %d\n",&a,&b);
            if(a>=0&&a<m&&b>=0&&b<n
                   )
                    printf("0\n");
            else
                printf("-1\n");
        }
        else 
        {
            printf("-1\n");
        }
    }
}

C 解法, 执行用时: 1ms, 内存消耗: 312KB, 提交时间: 2021-09-13

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int Buff[10] = {0,0,0,0,0,0,0,0,0,0};
    int Times = 0;
    int tmp = 0;
    
    while(scanf("%d",&tmp)  != EOF)
    {
        Buff[Times++] = tmp;
        if(Times == 10)
        {
            if(Buff[0] > 0 && Buff[1] > 0 && Buff[0] <= 9 && Buff[1] <= 9)
            {
                printf("0\n");
                if(Buff[2] < Buff[0] && Buff[3] < Buff[1] && Buff[4] < Buff[0] 
                   && Buff[5] < Buff[1] && Buff[2]>=0 && Buff[3]>=0 && Buff[4]>=0
                   &&Buff[5]>=0)
                {
                    printf("0\n");
                }
                else 
                {
                    printf("-1\n");
                }
                
                if(Buff[6] < Buff[0] && Buff[0] + 1 <= 9)
                {
                    printf("0\n");
                }
                else printf("-1\n");
                
                if(Buff[7] < Buff[1] && Buff[1] + 1 <= 9)
                {
                    printf("0\n");
                }
                else printf("-1\n");
                
                if(Buff[8] < Buff[0] && Buff[9] < Buff[1])
                {
                    printf("0\n");
                }
                else printf("-1\n");
            }
            else
            {
                printf("-1\n");
                printf("-1\n");
                printf("-1\n");
                printf("-1\n");
                printf("-1\n");
                continue;
            }
            Times = 0;
        }
    }
    return 0;
}

上一题