6)从左到右依次递增,从上到下依次递减的数组

原题展示:

1 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

然后思路总结:

因为你的那个二维数组是从 左往右是递增的,  从上到下是递增的,所以就有了,应该从数组的一角,往下看,就是

从左下角看:

     要是比这个大了,就往右走,

    要是比这个小了,就往上走

 

然后代码如下:

    

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main(){
 4     int a[3][4]={
 5         {1,2,3,4},
 6         {5,6,7,8},
 7         {9,10,11,12}
 8         };
 9         int num,hang,lie,num3;
10         printf("输入你要查询的数值:\n");
11         scanf("%d",&num);
12         hang=2;
13         lie=0;
14         int temp=0;
15         while(hang>=0&&lie<=3){
16             num3=a[hang][lie];
17             if(num>num3){
18                 hang=hang;
19                 lie=lie+1;
20                 //printf("%d\n",lie);
21             }
22         if(num<num3){
23                 hang=hang-1;
24                 lie=lie;
25             }
26         if(num==num3){
27             temp=1;
28             break;
29             }
30         
31         } 
32         if(temp==1){
33                 printf("找到了\n"); 
34         }else{
35             printf("没有找到!!\n"); 
36         }
37         return 0;
38     
39 }

 

 还有一个就是我编写一个函数,来处理这个问题:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 string search(int a[][1000], int m, int n, int key)
 6 {
 7     int i = 0;
 8     int j = n - 1;
 9     while(i < m && j >= 0)
10     {
11         if (a[i][j] == key)
12             return "Yes";
13         else if (a[i][j] < key)
14             i++;
15         else
16             j--;
17     }
18 
19     return "No";
20 }
21 
22 int main()
23 {
24     int n, m;
25     int a[1000][1000];//你看,虽然,表面上你可以改变数组的行数和列数,但是实际上,我是将数组的行数和列数设的很大,哎,全他妈是套路,不要脸
26     while(scanf("%d%d", &m, &n) != EOF)
27     {
28         int key;
29         scanf("%d", &key);
30         for(int i = 0; i < m; i++)
31             for(int j = 0; j < n; j++)
32                 scanf("%d", &a[i][j]);
33         cout << search(a, m, n, key) << endl;
34     }
35 }

 

 

    

转载于:https://www.cnblogs.com/xiaoyoucai/p/7485536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值