C语言:仅用stdio.h无数组实现最长相同数字序列统计函数求助
解决C语言无数组求最长连续相同数字序列问题
我来帮你搞定这个需求!咱们先理清楚核心要求,再一步步实现符合规则的代码——只能用stdio.h、不能用数组,还要统计最长连续序列的长度和它的出现次数。
核心思路分析
因为不能用数组存储所有输入,所以我们必须用状态变量实时跟踪当前的连续序列状态,不需要保存历史数据:
prev_num:记录上一个输入的正整数,用来和当前数比较是否连续current_len:当前正在统计的连续相同数字的长度max_len:目前找到的最长连续序列长度count_max:最长长度出现的次数
关键注意点:
- 第一个输入的数需要单独处理(因为一开始没有上一个数)
- 循环结束后,必须处理最后一段连续序列(退出循环时最后一段还没参与比较)
完整代码实现
#include <stdio.h> void MaxLength() { int n; // 初始化变量:prev_num设为-1(因为输入是正整数,第一个数必然和它不同) int prev_num = -1; int current_len = 0; int max_len = 0; int count_max = 0; // 循环输入正整数,直到输入负数停止 while (scanf("%d", &n) == 1 && n >= 0) { if (prev_num == -1) { // 处理第一个输入的数 prev_num = n; current_len = 1; } else if (n == prev_num) { // 当前数和上一个相同,连续长度+1 current_len++; } else { // 当前数和上一个不同,先处理上一段连续序列 if (current_len > max_len) { // 找到更长的序列,更新最长长度和计数 max_len = current_len; count_max = 1; } else if (current_len == max_len) { // 和当前最长长度相同,计数+1 count_max++; } // 重置状态,开始统计新的序列 prev_num = n; current_len = 1; } } // 处理循环结束后剩下的最后一段连续序列(非常重要,容易遗漏) if (current_len > 0) { if (current_len > max_len) { max_len = current_len; count_max = 1; } else if (current_len == max_len) { count_max++; } } // 按照要求格式输出结果 printf("最长长度 - %d,出现次数 - %d\n", max_len, count_max); } // 测试用主函数(可选,用于验证) int main() { MaxLength(); return 0; }
代码测试与验证
用你提供的示例输入测试:
19 19 97 97 97 97 681 681 681 681 97 36 36 36 97 97 97 97 36 -19
程序会输出:
最长长度 - 4,出现次数 - 3
完全符合预期——连续4次的序列分别是97(第一次)、681、97(第二次),共3次。
边界情况处理
- 仅输入一个正整数(如
5 -1):输出最长长度 - 1,出现次数 - 1 - 所有数都不重复(如
1 2 3 4 -5):输出最长长度 - 1,出现次数 - 4 - 多个相同最长长度的序列(如
22 22 33 33 44 44 -1):输出最长长度 - 2,出现次数 - 3
内容的提问来源于stack exchange,提问作者Ultraviolence
相关产品推荐
相关产品推荐

