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

C语言向量序列计算程序结果异常,请求排查原因

问题原因分析

你的代码逻辑和实际需求完全不匹配:

  • 现有代码的核心逻辑是统计所有位置i<j且valores[i]等于valores[j]的无序对数量。对于每个数字出现k次,它会贡献k*(k-1)/2的点数。比如你给出的例子:

    • 30总共出现6次,贡献6*5/2=15
    • 40总共出现5次,贡献5*4/2=10
    • 总和15+10=25,这就是程序输出25的原因。
  • 而你期望的输出是5,结合输入序列来看,这个结果应该对应序列中最长连续相同数字的长度(例子里40连续出现了5次)。你描述里的“连续数字序列中的点数”应该是指这个最长连续长度。

修正方案

如果你的需求是获取序列中最长连续相同数字的长度,修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(){     
    int N, valores[10000], i, max_len = 1, current_len = 1;
    scanf("%d", &N);
    for (i=0; i<N; i++){
        scanf("%d", &valores[i]);
    }

    // 处理空序列的特殊情况
    if (N == 0) {
        printf("0");
        return 0;
    }

    // 遍历数组统计最长连续长度
    for(i=1; i<N; i++){
        if (valores[i] == valores[i-1]) {
            current_len++;
            if (current_len > max_len) {
                max_len = current_len;
            }
        } else {
            current_len = 1;
        }
    }
    printf("%d", max_len);

    return 0;
}

如果你的实际需求是其他连续相关的统计(比如相邻相同数字的配对总数),可以基于连续遍历的逻辑调整,而非用双重循环统计所有无序对。

内容的提问来源于stack exchange,提问作者Renan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:09:59