2574 - 指针练习-5
时间限制 : 1 秒
内存限制 : 128 MB
编写一个函数find,其功能是在一个m行n列的二维整型数组中查找整数num。
函数原型可参考如下:
int find (int *p, int m, int n, int num, int *row, int *col);
其中,p为指向二维数组首元素的指针,n为数组的行数,m为数组的列数,num为待查找的整数,row为指向首次找到的num所在行的指针,col为指向num所在列的指针。
如果能找到欲查找的数,则函数返回1,并将row及col指针所指内容分别赋值为首次找到的num所在的行与列下标;如果找不到对应的数,则函数返回0,并将row及col指针所指内容分别赋值为-1。
编写程序,从键盘输入两个正整数m和n(1<=m,n<=100),分别代表数组的行数和列数,接着输入m*n个整数,代表数组元素的初始值,最后输入要查找的数num,调用find函数进行查找,如果能找到该数,则输出首次找到该数的行下标与列下标(用空格分隔);如果找不到,则输出"NOT FOUND"。
题目输入
3 4 24 15 16 19 69 63 52 42 15 95 7 6 52
题目输出
1 2
输入/输出样例
输入格式
4 4 12 89 96 75 57 2 69 100 36 31 75 88 7 6 18 53 20
输出格式
NOT FOUND
C语言解答
#include<stdio.h> int find (int a[][100], int m, int n, int num, int *row, int *col) { int i,j,x=0; *row = 0; *col = 0; for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(a[i][j]==num) { *row = i; *col = j; return 1; } } } return 0; } int main() { int a[100][100]; int m,n; int i,j,x; int (*p)[100]; int num; int row; int col; scanf("%d",&m); scanf("%d",&n); for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } } p = a; scanf("%d",&num); x = find (a, m, n, num,&row,&col); if(x == 1) { printf("%d %d",row,col); } if(x == 0) { printf("NOT FOUND"); } return 0; }
C++解答
#include<stdio.h> int main() { int find (int *p, int n, int m, int num, int *row, int *col); int *p, m, n, num, *row, *col, i, j, a[100][100], d, c, b; p=a[0]; row = &d; col = &c; scanf("%d%d", &n, &m); for(i=0; i<n*m; i++) { scanf("%d", p+i);/*修改正确的关键地方*/ } scanf("%d", &num); b = find (p, n, m, num, row, col); if(b==1) printf("%d %d", d, c); else if(b==0) printf("NOT FOUND"); } int find(int * p, int n, int m, int num, int *row, int *col) { int i, j, s; *row = -1; *col = -1; for(i = 0 ; i < n ; i++) { for (j = 0 ; j < m ; j++) { if(*(p + i*m + j) == num) { *row = i; *col = j; return 1; } } } return 0; }