数组中两个相邻值之间的最大差值,C
我想找出数组中两个相邻值之间的最大差值由于数组中两个相邻值之间的最大差值,C,c,arrays,C,Arrays,我想找出数组中两个相邻值之间的最大差值由于8和2之间的差异,最大差异为6。剩余差异等于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
8
和2
之间的差异,最大差异为6
。剩余差异等于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;
}
#包括
int main(int argc,字符**argv)
{
int n=6;
int tab[6]={1,2,8,4,5,6};
int diff=tab[1]-tab[0],maxdiff=diff,i;
对于(i=2;i maxdiff)
maxdiff=diff;
diff=tab[i]-tab[i-1];
}
printf(“%d\n”,差异);
返回0;
}
i好的,您将最大差异的信息保存到
中,但您总是打印maxdiff
,这是最后一对数字之前的一对数字之间的差异(在本例中为diff
)1
应该上升到i
,否则不考虑最后一对- 我会清理一下代码,然后检查
n有两个问题。首先,打印的是
,而不是diff
。因此,您得到的是上一次差异的结果,而不是最大值 第二,你没有取绝对值。这意味着maxdiff
将得到2,而不是6 最后,虽然这不是一个bug,但是可以从{8,2,4}
开始删除大量重复 还有一个风格提示:在一行上声明多个变量很难理解。在一行上声明和初始化它们是很难理解的。不要这样做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; }
这看起来更像。。。乔治:但是当我把#包括 #包括 int main(){ int n=6; int tab[]={1,2,8,4,5,6}; int-maxdiff=0; 对于(int i=1;i
最大差异){ maxdiff=diff; } } printf(“%d\n”,maxdiff); 返回0; }
改为6
时,它仍然打印26
,而不是在这种情况下,6
。使用调试器。这是因为您正在打印21
而不是diff
如果代码需要处理整个maxdiff
范围内的int
值,因为int
可能会溢出,则此任务会更有趣。当然可以使用更宽的整数,但是如果任务是tab[i]-tab[i-1]
?嗯,还请注意唯一一个稍微微妙的错误:如果您为intmax\u t tab[6]
和2
切换位置会怎么样?8
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; }
#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; }
- 我会清理一下代码,然后检查