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的原因。
- 30总共出现6次,贡献
而你期望的输出是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
相关产品推荐
相关产品推荐

