|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 冷回清风暖 于 2020-8-22 16:49 编辑
题干:
数组A = (a1,a2,a3,.......)
数组B = (b1,b2,b3,.......)
先去除数组最大公共前缀,如A = (a,b,c,r,d), B = (a,b,l,o,r),则最大公共前缀为(a,b,c)
去除最大公共前缀后的连个数组为 :A1 = (r,d) B1 = (l,o,r)
如果A1 = B1 = 空表 ,则A = B。
若A1 = 空表 且 B1 = 空表,或两者均不为空且A1的第一个元素小于B1的第一个元素值,则A<B,否则A>B.
实现代码:
- #include<stdio.h>
- #define min 0.000000001
- int compare(float A[], int An, float B[], int Bn)
- {
- int i = 0;
- while (i < An && i < Bn)//过滤公共前缀
- {
- if (abs(A[i] - B[i]) < min)//min是一个已定义的足够小的数
- ++i;
- else break;
- }
- if (i >= An && i >= Bn)//A和B都为空
- return 0;
- else if ((i >= An && i < Bn) || A[i] < B[i])
- return -1;
- else
- return 1;
- }
- int main(void)
- {
- int result;
- float a[] = { 0.1, 0.2, 0.3, 0.4 ,0.3};
- float b[] = { 0.1, 0.2, 0.3, 0.4 };
- result = compare(a, 4, b, 5);
- printf("%d\n",result);
- return 0;
- }
复制代码
- else if ((i >= An && i < Bn) || A[i] < B[i])
复制代码
这行代码好像没有体现出来 “两者均不为空” 只体现出来了 “两者均不为空且A1的第一个元素小于B1的第一个元素值”
但这是参考答案 ,看了好就没看出来
不好意思,看错了。程序的确有问题。不但15行有问题,27行也有问题。数组a和b的长度4和5写反位置了
- #include<stdio.h>
- #include<math.h>
- #define min 0.000000001
- int compare(float A[], int An, float B[], int Bn)
- {
- int i = 0;
- while (i < An && i < Bn)//过滤公共前缀
- {
- if (fabs(A[i] - B[i]) < min)//min是一个已定义的足够小的数
- ++i;
- else break;
- }
- if (i >= An && i >= Bn)//A和B都为空
- return 0;
- else if ((i >= An && i < Bn) || (i < An && i < Bn &&A [i] < B[i]))
- return -1;
- else
- return 1;
- }
- int main(void)
- {
- int result;
- float a[] = { 0.1, 0.2, 0.3, 0.4 ,0.03};
- float b[] = { 0.1, 0.2, 0.3, 0.4 };
- result = compare(a, 5, b, 4);
- printf("%d\n",result);
- return 0;
- }
复制代码
|
|