我想找到数组中两个相邻值之间的最大差异。例如,对于数组int tab[6] = {1,2,8,4,5,6};
,最大差异为6
,因为8
和{之间存在差异{1}}。剩余差异等于2
。所以,我的程序结果应该是1
。但是,我的程序打印6
,我不知道问题出在哪里:
1
答案 0 :(得分:5)
好吧,您将有关最大差异的信息保存到diff
,但是您始终打印1
,这是最后一对数字之前的差异(在此示例中为i
)。
< n
应升至n<=1
,否则您不会考虑最后一对。
abs
角落情况。abs
或通过相应地更改操作数的顺序来确保减法为您提供非负结果。 (int main(int argc, char **argv) {
const int n = 6;
int tab[n] = {1, 2, 8, 4, 5, 26};
if (n <= 1)
return 0; //or whatever you have to do in this corner case
else {
int maxdiff = INT_MIN;
for (int i = 1; i < n; i++)
maxdiff = max(maxdiff, abs(tab[i] - tab[i - 1]));
printf("%d\n", maxdiff);
}
return 0;
}
更容易)这是我的建议:
{{1}}
答案 1 :(得分:2)
i<n-1
不会测试tab
的最后两个值之间的差异
应该是i<n
。maxdiff
abs
中定义的stdlib.h
功能,也可以自己编写diff > 0? diff : -diff
。固定代码:
int main(int argc, char **argv)
{
int n = 6;
int tab[6] = {1,2,8,4,5,6};
int diff = abs(tab[1] - tab[0]), maxdiff = diff, i;
for(i=2; i<n; i++)
{
diff = abs(tab[i] - tab[i-1]);
if(diff > maxdiff)
maxdiff = diff;
}
printf("Max difference: %d\n", maxdiff);
return 0;
}
答案 2 :(得分:1)
有两个问题。首先,您要打印diff
而不是maxdiff
。所以你得到了最后一个差异的结果,而不是最大值。
其次,你没有取绝对值。这意味着{8,2,4}
将导致2而不是6。
最后,虽然这不是一个错误,但可以从maxdiff = 0
开始删除一堆重复。
样式注释:在一行上声明多个变量很难阅读。在一行上声明并初始化很难阅读。不要这样做。
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 6;
int tab[] = {1,2,8,4,5,6};
int maxdiff = 0;
for(int i=1; i < n; i++) {
int diff = abs(tab[i] - tab[i-1]);
if(diff > maxdiff) {
maxdiff = diff;
}
}
printf("%d\n", maxdiff);
return 0;
}