You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:36:03