-------------------------------------------------------------------------------------------------
"杨氏矩阵":即数组元素从左向右依次递增,从上到下依次递增。要想在该数组中查找数,首
先该数组得满足“杨氏矩阵”的特点。为了方便理解我们可以将一个二位数组看作是一个矩阵,假设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表示指数位。
------------------------------------------------------------------------------------------------------