-----------------------------------------------------------------------------------------------------

          "杨氏矩阵":即数组元素从左向右依次递增,从上到下依次递增。要想在该数组中查找数,首

先该数组得满足“杨氏矩阵”的特点。为了方便理解我们可以将一个二位数组看作是一个矩阵,假设i

为行,j为列,数组为str,那么只要满足(str[i][j]<str[i][j+1] && str[i][j]<str[i+1][j]),

注意在判断的时候循环只需要循环i-1次即可。

-----------------------------------------------------------------------------------------------------


C语言代码:

# include <stdio.h>
# include <stdlib.h>

# define MAX 3      /*定义矩阵大小为3行3列*/       

/*
**给数组赋值,判断是否满足“杨氏矩阵”
**的特点,如果不满足则重新输入数据。
*/
int init(int arr[][MAX])                       
{
     int i = 0, j = 0;
     
     printf("请输入9个整数赋值给该数组:\n");
     for (i = 0; i < MAX; i++)
     {
          for (j = 0; j < MAX; j++)
          {
               scanf("%d",&arr[i][j]);
          }
     }
     
     for (i = 0; i < MAX-1; i++)
     {
          for (j = 0; j < MAX-1; j++)
          {
               if (arr[i][j] >= arr[i][j + 1] || arr[i][j] >= arr[i+1][j])
               {
                    printf("你输入的数组不符合要求,请重新输入\n");
                    return 1;
               }
          }
     }
     
     printf("恭喜你赋值成功\n");
     return 0;
}




/*
**判断x这个数是否存在于该数组中
*/
int insert(const int arr[][MAX], const int x)
{
     int i = 0, j = 0;
     
     for (i = 0; i < MAX; i++)
     {
          for (j = 0; j < MAX; j++)
          {
               if (x == arr[i][j])
               {
                    return 1;
               }
          }
     }
 
     return -1;
}


int main()
{
     int str[MAX][MAX] = { 0 };
     int num = 0, ret = 0;
     int sign = 1;
 
     while (sign)
     {
          sign = init(str);
     }
     
     printf("\n\n请输入要查找的数:");
     scanf("%d",&num);
     ret = insert(str, num);
 
     if (1 == ret)
     {
          printf("恭喜你!!!%d在该数组中\n",num);
     }
     else
     {
          printf("查找失败!!!%d不在数组中!!!\n",num);
     }

     system("pause");
     return 0;
}

 

------------------------------------------------------------------------------------------------------

干货小知识:

     根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

        V = (-1)^s * M * 2^E  (s是符号、M是有效数字 、E是阶乘)

  (1)(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
  (2)M表示有效数字,大于等于1,小于2。
  (3)2^E表示指数位。

 

------------------------------------------------------------------------------------------------------