-------------------------------------------------------------------------------------------------
"杨氏矩阵":即数组元素从左向右依次递增,从上到下依次递增。要想在该数组中查找数,首
先该数组得满足“杨氏矩阵”的特点。为了方便理解我们可以将一个二位数组看作是一个矩阵,假设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表示指数位。
------------------------------------------------------------------------------------------------------
本文出自 “无名小卒” 博客,请务必保留此出处http://814193594.blog.51cto.com/10729329/1709689
原文:http://814193594.blog.51cto.com/10729329/1709689