我在C的大学里对HW有疑问,请注意我不允许使用绝对值函数(abs)
我需要找到给定数组中的数字对之间的最小值。
假设数组为:
int arr[SIZE] = {1,10, 5,100,15,20,25,30,35,40};
并且int diff = 0;
使用不带abs函数的这段代码给了我错误的答案:
for (int i=0; i<SIZE-1; i++) {
for (int j=i+1; j<SIZE; j++) {
if (arr[i] - arr[j] < diff)
diff = (-1) * (arr[i] - arr[j]);
}
}
该值应为4,代码返回5。
您的代码不好,因为与之比较的内容diff
和设置为diff
不同的内容。
您可以通过否定结果是否为负来获得绝对值。
diff = -1; /* initialize to invalid value */
for (int i=0; i<SIZE-1; i++) {
for (int j=i+1; j<SIZE; j++) {
int score = arr[i] - arr[j];
if (score < 0) score = -score; /* negate if negative */
if (diff < 0 || score < diff) /* if first or new record */
diff = score; /* update the record */
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句