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;
}