我想找到在array.For情况下两个相邻值之间的差异最大,为阵列int tab[6] = {1,2,8,4,5,6};的最大差异是6因为之间的差异,8以及2.剩下的差异等于1.所以,我的程序的结果应该是6.但是,我的程序打印1,我不知道问题出在哪里:
#include <stdio.h>
int main(int argc, char **argv)
{
int n = 6;
int tab[6] = {1,2,8,4,5,6};
int diff = tab[1] - tab[0], maxdiff = diff, i;
for(i=2; i<n-1; i++)
{
if(diff > maxdiff)
maxdiff = diff;
diff = tab[i] - tab[i-1];
}
printf("%d\n", diff);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
好吧,你保留有关最大差异的信息,maxdiff但是你总是打印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;
}
Run Code Online (Sandbox Code Playgroud)