题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排列。请完成这样一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:如输入的二维数组为
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
我们可以从右上角开始的那个数字(设为data[x][y])与输入数字(设为d)进行比较,如果
data[x][y]<d,说明当前数字小于给定数字d,我们只能向比当前数字大的那个方向继续查找,于是我们向下走,即x++;
如果data[x][y]>d,说明当前数字大于给定数字d,我们只能向比当前数字小的那个方向继续查找,于是我们向左走,即y--;
如果data[x][y]==d,则我们就找到了与给定数字相等的那个整数,就可以返回了。
代码如下:
#include <stdio.h> int DoesHave(int (*data)[4],int m,int n,int d) { int ret = 0; int x=0,y=n-1; if(data == NULL) return -1; while(x<m && y>=0) { if(data[x][y] == d) { ret = 1; break; } else if(data[x][y] < d) { x++; } else if(data[x][y] > d) { y--; } } return ret; } int main() { int data[4][4]; int i,j; int ret; int d; for(i=0;i<4;i++) for(j=0;j<4;j++) { scanf("%d",&data[i][j]); } printf("请输入你要判断是否存在的整数:"); scanf("%d",&d); ret = DoesHave(data,4,4,d); if(ret) printf("存在该数%d",d); else printf("不存在该数%d",d); return 0; }