sdkjdx oj 2182 Problem B 在二维数组中查找

Description

给定一个M行N列的二维数组matrix,以及一个数据k,查找k在matrix中所有出现的位置(即行、列坐标)。

Input

输入有多行。

第一个是0<M,N<101,表示之后的二维数组是M行N列的。

之后输入的是一个M行N列的二维数组。

数组之后是分多行输入的待查找的数据,每行输入一个。直到EOF为止。

Output

输出有多行,每行输出对应与一个输入的待查找的数据。

如果待查找的数据在二维数组中,则输出:

case #:    i1  j1,   i2  j2,   ... .

其中#是测试用例的编号,从1开始,与输入的待查找数据一一对应。i1和j1等是按照行优先的顺序输出的待查找数据在数组中的位置,即下标。输出时,下标占4个宽度,行、列下标之间用1个空格隔开,每对行、列下标之间用1个逗号(,)隔开,最后有一个句点(.)。

如果待查找的数据不在数组中,则输出:

case #: NOT FOUND.

其中#的含义同前。

Sample Input

4 4 1 2 3 4 4 3 2 1 2 3 4 1 3 4 1 2 5 1 3

Sample Output

case 1: NOT FOUND. case 2: 0 0, 1 3, 2 3, 3 2. case 3: 0 2, 1 1, 2 1, 3 0.

HINT

Append Code 

#include<stdio.h>
int main()
{
    int M,N;
    scanf("%d %d",&M,&N);
    int matrix[M][N];
    int i,j;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
            scanf("%d",&matrix[i][j]);
    }
    int a,k=0;//k为case计数
    int copy_[M][N];

    while(scanf("%d",&a)!=EOF)
    {
        ++k;printf("case %d: ",k);
        for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
            copy_[i][j]=0;//二维数组归零
    }
        int s=0,l=0;//负责输出‘,’‘.’
        for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
            {
                if(matrix[i][j]==a){copy_[i][j]=1;++s;}//符合a的值的二位数组坐标为1,其余为0,每有一个符合的坐标就s+1
            }
    }
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
            {
                if(copy_[i][j]==1)//判断输出二维数组
               {printf("%4d %4d",i,j);l++;if(l!=s)printf(",");
                else if(l==s) printf(".");}//l=s使为最后一个坐标打印出来,加‘.’,l!=s,打印坐标后输出‘,’


            }
    }
    if(s==0)printf("NOT FOUND.");//s=0意味着没有符合题目的值,输出NOT FOUND
    printf("\n");
    }
    return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值