大家好,欢迎来到IT知识分享网。
有一个数字矩阵,矩阵的每行从左到右是递增的,短阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
例如:矩形(二维数组)
1 2 3
4 5 6
7 8 9
查找里面某个元素的位置
1.方法一
代码展示:
#include <stdio.h> int find_num(int arr[3][3],int row,int column,int k) //行:row 列:column { int x=0;//行 int y=column-1;//列 while(x<=row-1 && y>=0) { if(k<arr[x][y]) { y--; } else if(k>arr[x][y]) { x++; } else { return 1; } } return 0; } int main() { int arr[3][3]={1,2,3,4,5,6,7,8,9}; int k=0; printf("请输入要寻找的值:"); scanf("%d",&k); int ret = find_num(arr,3,3,k); printf("ret=%d\n",ret);//找到返回1,没找到返回0 return 0; }
运行结果展示:
2.方法二:
代码展示:对比方法一,此方法用结构体返回查找值的位置
#include <stdio.h> struct Point { int x; int y; }; struct Point find_num(int arr[3][3],int row,int column,int k) //行:row 列:column { int x=row-1;//行 int y=0;//列 struct Point p ={-1,-1}; while(x >= 0 && y <= column-1) { if(k<arr[x][y]) { x--; } else if(k>arr[x][y]) { y++; } else { p.x=x; p.y=y; return p; } } return p; } int main() { int arr[3][3]={1,2,3,4,5,6,7,8,9}; int k=0; printf("请输入寻找的值:"); scanf("%d",&k); struct Point ret=find_num(arr,3,3,k); printf("%d %d\n",ret.x,ret.y); return 0; }
运行结果展示:
3.方法三:
代码展示: 返回型参数—(指针)
#include <stdio.h> //返回型参数 int find_num(int arr[3][3],int *px,int *py,int k)//行:row 列:column { int x=0;//开始行 int y=*py-1;//开始列 while(x<=*py-1 && y>=0) { if(k<arr[x][y]) { y--; } else if(k>arr[x][y]) { x++; } else { *px=x; *py=y; return 1; } } *px=-1; *py=-1; return 0;//都可以判断是否找到k的值 } int main() { int arr[3][3]={1,2,3,4,5,6,7,8,9}; int k=0; int a=3;//行 int b=3;//列 printf("请输入要寻找的值:"); scanf("%d",&k); int ret = find_num(arr,&a,&b,k); //找到返回1,没找到返回0 if(ret == 1) printf("%d %d\n",a,b); else printf("没找到"); return 0; }
运行结果展示:
4.方法四
代码展示:可通过宏改变矩阵大小
#include <stdio.h> //宏 #define I 4 #define J 6 //结构体 struct Point { int x; int y; }; struct Point find_num(int arr[I][J],int row,int column,int k) //行:row 列:column { int x=row-1;//行 int y=0;//列 struct Point p ={-1,-1}; while(x >= 0 && y <= column-1) { if(k<arr[x][y]) { x--; } else if(k>arr[x][y]) { y++; } else { p.x=x; p.y=y; return p; } } return p; } int main() { int arr[I][J]; int l=0; int i = 0; for(i = 0; i < I; i++) { int j = 0; for(j = 0; j < J; j++) { l++; arr[i][j]=l; printf("%2d ",arr[i][j]); } printf("\n"); } int k=0; printf("请输入寻找的值:"); scanf("%d",&k); struct Point ret=find_num(arr,I,J,k); printf("arr[%d][%d]=%d\n",ret.x,ret.y,k); return 0; }
运行结果展示:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/148778.html