C语言如何打印数组中所有差值等于最大值的相邻元素对
问题分析
你的代码存在3个核心错误,导致无法输出所有符合要求的元素对:
- 初始化diff的时机错误:定义数组后立刻计算
a[1]-a[0]赋值给diff,此时数组还未读入任何输入值,存储的是内存随机垃圾值,diff初始值完全不正确。 - 最大差统计逻辑错误:遍历相邻元素时,仅在差值大于当前diff时给count加1,差值等于最大diff的情况不会被统计,且count统计的是最大差的更新次数,不是符合条件的元素对总数。
- 输出逻辑错误:直接输出前count个相邻元素对,没有判断这些对的差值是否等于最大差,符合条件的元素对可能出现在数组任意位置,不会全部集中在数组开头。
修正方案
正确的实现逻辑分为两步:第一遍遍历先找到最大差值,第二遍遍历输出所有差值等于最大值的相邻元素对即可。修正后的代码如下:
#include <stdio.h> int main(){ int n,i,j,a[10000],temp; int diff; scanf("%d",&n); for(i=0; i<n; i++){ scanf("%d",&a[i]); } // 冒泡排序(如果你的需求不需要排序,可以删除这段逻辑) for(i=0; i<n-1; i++){ for(j=0; j<n-i-1; j++){ if(a[j] > a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } // 第一步:遍历找最大差值 diff = a[1] - a[0]; for(i=1; i<n-1; i++){ int current_diff = a[i+1] - a[i]; if(current_diff > diff){ diff = current_diff; } } // 第二步:遍历输出所有差值等于最大值的元素对 for(i=0; i<n-1; i++){ if(a[i+1] - a[i] == diff){ printf("%d %d ",a[i],a[i+1]); } } printf("\n"); return 0; }
代码说明
- 移除了冗余的
getchar()调用,scanf读取整型时会自动跳过空格、换行等空白字符,不需要额外处理。 - 调整了diff的初始化时机,在数组读入、排序完成后再初始化,避免读取垃圾值。
- 拆分了最大差计算和结果输出的逻辑,先确认最大差,再统一筛选所有符合条件的元素对输出,不会遗漏多组符合要求的结果。
内容的提问来源于stack exchange,提问作者rrrr
相关产品推荐
相关产品推荐

