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

二进制字符串连续01/10对计数问题及代码调试求助

问题分析与代码修正

原代码存在的问题

  • 数组类型错误:把存储二进制字符串的数组S定义成了int类型,实际应该用char类型来存储字符。
  • 字符串输入方式错误:在循环里多次调用scanf("%s", &S)读取单个字符,这会每次读取整个字符串覆盖之前内容,正确做法是一次性读取完整的二进制字符串。
  • 统计循环逻辑错误:
    • 统计连续对时,循环范围应该到N-2(要访问S[j+1],避免数组越界)。
    • 每个测试用例开始时没重置count,会导致不同测试用例的结果累加,输出错误数值。
  • 输出时机错误:在字符循环内部就打印count,会输出中间值而非最终统计结果,应该在每个测试用例统计完成后再输出。

修正后的代码

#include <stdio.h>
#include <string.h>

int main() {
    int T, N, i, j, count;
    // 定义足够大的char数组存储字符串,N最大1000,留1位给字符串结束符
    char S[1001];

    scanf("%d", &T);

    for (i = 0; i < T; i++) {
        scanf("%d", &N);
        // 一次性读取完整的二进制字符串
        scanf("%s", S);
        // 每个测试用例开始时重置计数器
        count = 0;
        // 循环到N-2,避免访问S[N]导致越界
        for (j = 0; j < N - 1; j++) {
            // 判断当前字符和下一个字符是否是01或10组合
            if ((S[j] == '0' && S[j+1] == '1') || (S[j] == '1' && S[j+1] == '0')) {
                count++;
            }
        }
        // 每个测试用例统计完成后输出结果
        printf("%d\n", count);
    }

    return 0;
}

修正点说明

  1. 数组类型调整:将int S[100]改为char S[1001],适配字符串存储需求,同时保证长度足够容纳最大长度的输入字符串。
  2. 输入方式修正:移除读取单个字符的循环,直接用scanf("%s", S)读取完整的二进制字符串。
  3. 计数器重置:在每个测试用例的统计循环前,将count重置为0,确保每个测试用例的统计独立。
  4. 循环范围修正:统计循环的上限改为N-1,避免数组越界访问。
  5. 输出时机调整:将printf移到测试用例的统计循环之后,输出最终的统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:05:22