首页 > 试题广场 >

二维数组操作

[编程题]二维数组操作
  • 热度指数: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)坐标。       
#include <stdio.h>

int main() {
    int m,n;
    while (scanf("%d %d", &m, &n) != EOF) {
        int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
        scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
        int x = 0;
        scanf("%d",&x);
        int y = 0;
        scanf("%d",&y);
        int xx = 0, yy = 0;
        scanf("%d %d",&xx,&yy);
        //1、判断初始化表是否合理
        if(m>0&&n>0&&m<=9&n<=9)
        {
            printf("0\n");
        }
        else
        {
            printf("-1\n");
        }
        //2、判断交换坐标是否在表格内
        if((x1>=0&&x1<m)&&(x2>=0&&x2<m)&&(y1>=0&&y1<n)&&(y2>=0&&y2<n))
        {
            printf("0\n");
        }
        else
        {
            printf("-1\n");
        }
        //3、判断第x行是否在表格内,且添加一行后是否超过最大行数
        if(x>=0&&x<m&&m+1<=9)
        {
            printf("0\n");
        }
        else
        {
            printf("-1\n");
        }
        //4、判断第y列是否在表格内,且添加一列后是否超过最大列数
        if(y>=0&&y<n&&n+1<=9)
        {
            printf("0\n");
        }
        else
        {
            printf("-1\n");
        }
        //5、判断查找的坐标是否在表格内
        if(xx>=0&&xx<m&&yy>=0&&yy<n)
        {
            printf("0\n");
        }
        else
        {
            printf("-1\n");
        }
    }
    return 0;
}
发表于 2023-10-13 22:18:25 回复(0)
//不知道是啥意思,就这样过把
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M  9
#define N  9

int main(void)
{
    int m,n,x1,y1,x2,y2,x,y,x0,y0;
    int a[M][N] ={{0}};
    int tmp;
    int i = 0,j=0;
    srand((unsigned)time(NULL));
    while(scanf("%d %d %d %d %d %d %d %d %d %d",&m,&n,&x1,&y1,&x2,&y2,&x,&y,&x0,&y0)!=EOF)
    {
        //初始化表格是否成功,若成功则返回0, 否则返回-1
        if(m > M || n > N)
        {
           printf("-1\n"); 
           return -1;
        }
        else
        {
            printf("0\n");
        }
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                a[i][j] = rand();
            }
        }
        //输出交换单元格是否成功
        if(x1>=m || x2 >=m || y1>=n || y2>=n)
        {
            printf("-1"); 
        }
        else
        {
            printf("0"); 
            tmp = a[x1][y1];
            a[x1][y1] = a[x2][y2];
            a[x2][y2] = tmp;
        }
        printf("\n");
        //输出插入行是否成功
        if((m+1)>M || (m-1)<x)
        {
            printf("-1");
        }
        else
        {
           // m +=1;
            for(i=m-1;i>x;i--)
            {
                for(j=0;j<n;j++)
                {
                    a[i+1][j] =a[i][j]; 
                }
            }
            for(j = 0; j < n; j++ )
            {
                a[x][j] = rand();
            }
          //  m += 1;//如果插入成功了则将数据表恢复至初始化的m*n\m∗n 大小,多出的数据则应舍弃?莫名其妙
            printf("0");
        }
        printf("\n");
        //输出插入列是否成功
        if((n+1)>N || (n-1)<y)
        {
            printf("-1");
        }
        else
        {
           // m +=1;
            for(i=n-1;i>y;i--)
            {
                for(j=0;j<m;j++)
                {
                    a[i][j+1] =a[i][j]; 
                }
            }
            for(i = 0; i < m; i++ )
            {
                a[i][y] = rand();
            }
           // n += 1;//如果插入成功了则将数据表恢复至初始化的m*n\m∗n 大小,多出的数据则应舍弃?莫名其妙
            printf("0");
        }
        printf("\n");
        //查找坐标为(x,y)\(x,y) 的单元格的值
        if(x0>=m ||y0>=n)
        {
            printf("-1");
        }
        else
        {
            //printf("%d\n",a[x0][y0]);
            printf("0");
        }
        printf("\n");
    }
   // printf("\n");
    return 0;
}
发表于 2022-06-18 22:40:04 回复(0)
这啥啊?这题出的毫无意义
#include <iostream>

using namespace std;

int main(){
    int m,n,x1,y1,x2,y2,x,y,x0,y0;
    while(cin >> m >> n >> x1 >> y1 >> x2 >> y2 >> x >> y >> x0 >> y0){
        if(m>9 || n>9){
            cout << "-1" << endl;
        }
        else{
            cout << "0" << endl;
        }
        if(x1>=m || x2>=m ||  y1>=n || y2>=n){
            cout << "-1" << endl;       
        }
        else{
            cout << "0" << endl;
        }
        if(x>m-1 || m+1>9){
            cout << "-1" << endl;       
        }
        else{
            cout << "0" << endl;
        }
        if(y>n-1 || n+1>9){
            cout << "-1" << endl;     
        }
        else{
            cout << "0" << endl;
        }
        if(!(x0<m && y0<n)){
            cout << "-1" << endl;      
        }
        else{
            cout << "0" << endl;
        }
    }
}


发表于 2022-06-18 09:27:17 回复(0)
#include <stdio.h>
int main()
{
    int m,n,res[5*5],cnt=0,i=0,x1,y1,x2,y2;
    for(m=0;m<25;m++)
    {
        res[m]=-1;
    }
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        cnt++;
        if(m>=1&&m<=9&&n>=1&&n<=9)
            res[i++]=0;
        else
        {
            i+=5;
            continue;
        }
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        if(x1>=0&&x1<=m-1&&x2>=0&&x2<=m-1&&
           y1>=0&&y1<=n-1&&y2>=0&&y2<=n-1)
        {
            res[i]=0;
        }
        i++;
        scanf("%d",&x1);
        if(m<9&&x1>=0&&x1<=m-1)
            res[i]=0;
        i++;
        scanf("%d",&y1);
        if(n<9&&y1>=0&&y1<=n-1)
            res[i]=0;
        i++;
        scanf("%d%d",&x1,&y1);
        if(x1>=0&&x1<=m-1&&x2>=0&&x2<=m-1)
        {
            res[i]=0;
        }
        i++;      
    }
    for(i=0;i<5*cnt;i++)
    {
        printf("%d\n",res[i]);
    }
    return 0;
}
纸老虎
发表于 2022-04-24 16:59:28 回复(0)
这个题目和二维数组一毛钱关系都没有😅
发表于 2022-03-07 22:55:11 回复(0)
#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;
}



发表于 2021-09-06 15:12:39 回复(0)
#include<stdio.h>

int main()
{
    int m,n,x1,x2,y1,y2,x,y,xx,yy;
    int res,cnt=0;
    int buf;
//     while(scanf("%d",&buf)!=EOF)
    while(scanf("%d",&buf)!=EOF)
    {
        cnt++;
        if(cnt==1)
            m=buf;
        else if(cnt==2)
            n=buf;
        else if(cnt==3)
            x1=buf;
        else if(cnt==4)
            y1=buf;
        else if(cnt==5)
            x2=buf;
        else if(cnt==6)
            y2=buf;
        else if(cnt==7)
            x=buf;
        else if(cnt==8)
            y=buf;
        else if(cnt==9)
            xx=buf;
        else if(cnt==10)
            yy=buf;
        
        if(cnt==10)
        {
            cnt=0;
            if(m>9||n>9)
            res=-1;
        else
            res=0;
        printf("%d\n",res);
        
        if(x1>m-1||x2>m-1||y1>n-1||y2>n-1)
            res=-1;
        else
            res=0;
        printf("%d\n",res);
        
        if(m+1>9||x>m-1)
            res=-1;
        else
            res=0;
        printf("%d\n",res);
        
        if(n+1>9||y>n-1)
            res=-1;
        else
            res=0;
        printf("%d\n",res);
        
        if(xx>m-1||yy>n-1)
            res=-1;
        else
            res=0;
        printf("%d\n",res);
        }
        
    }
}

发表于 2021-08-21 00:57:08 回复(0)
我好想写复杂了,用了字符串输入,然后拆分字符串转化成int,就当练习字符串拆分吧,哈哈
#include<stdio.h>
int main(){
    int time=0;
    int list[9][9] = {0};
    char in[10];
    char sub_in[4][3]={0};
    char *p = sub_in;
    int m,n,x,y,x1,y1,x2,y2;
    while(gets(in)){
        memset(sub_in,0,sizeof(sub_in));
        p=strtok(in, " ");
        int sub_in_m=0;
        while(p != NULL && sub_in_m<4){
            sprintf(sub_in[sub_in_m], "%s", p);
            p=strtok(NULL, " ");
            sub_in_m++;
        }
        // 操作1
        if(time==0){
            m=atoi(sub_in[0]);
            n=atoi(sub_in[1]);
            if(m<0 || m>9 || n<0 || n>9){
                printf("-1\n");
            }else{
                memset(list,0,sizeof(list));
                printf("0\n");
            }
        }
        // 操作2
        if(time==1){
            x1=atoi(sub_in[0]);
            y1=atoi(sub_in[1]);
            x2=atoi(sub_in[2]);
            y2=atoi(sub_in[3]);
            if(x1<0 || x1>=m || y1<0 || y1>=n || x2<0 || x2>=m || y2<0 || y2>=n){
                printf("-1\n");
            }else{
                printf("0\n");
            }
        }
        // 操作3
        if(time==2){
            x=atoi(sub_in[0]);
            if(x<0 || x>=m || m==9){
                printf("-1\n");
            }else{
                printf("0\n");
            }
        }
        // 操作4
        if(time==3){
            y=atoi(sub_in[0]);
            if(y<0 || y>=n || n==9){
                printf("-1\n");
            }else{
                printf("0\n");
            }
        }
        // 操作5
        if(time == 4){
            x=atoi(sub_in[0]);
            y=atoi(sub_in[1]);
            if(x<0 || x>=m || y<0 || y>=n){
                printf("-1\n");
            }else{
                printf("0\n");
            }
            time = 0; // 恢复time
            continue;
        }
        time++;
    }
    return 0;
}
发表于 2021-08-04 23:12:49 回复(0)