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

使用双数组函数打印奇数时末尾多余逗号问题求助

问题核心

你的代码输出末尾多逗号的原因是判断逗号输出的逻辑完全错误:你用(s1+s2)/2作为奇数数量的参考,但实际奇数的数量和两个数组总长度的半值没有任何关联——比如第二个测试用例总长度为6,半值是3,但实际只有2个奇数,导致最后一个奇数后依然输出了逗号。

修复方案

这里提供两种简洁可靠的修复方式:

方案一:先统计总奇数数,按需输出逗号

先遍历两个数组统计出所有奇数的总数,再遍历输出奇数,仅当当前输出的不是最后一个奇数时才添加逗号:

#include<stdio.h>

void printOdd(int arr1[], int arr2[], int s1, int s2) {
    // 统计所有奇数的总数
    int totalOdds = 0;
    for (int i = 0; i < s1; i++) {
        if (arr1[i] % 2 != 0) totalOdds++;
    }
    for (int i = 0; i < s2; i++) {
        if (arr2[i] % 2 != 0) totalOdds++;
    }

    // 遍历输出奇数,判断是否添加逗号
    int currentCount = 0;
    for (int i = 0; i < s1; i++) {
        if (arr1[i] % 2 != 0) {
            printf("%d", arr1[i]);
            currentCount++;
            if (currentCount < totalOdds) printf(", ");
        }
    }
    for (int i = 0; i < s2; i++) {
        if (arr2[i] % 2 != 0) {
            printf("%d", arr2[i]);
            currentCount++;
            if (currentCount < totalOdds) printf(", ");
        }
    }
}

int main(void)
{
    int s1, s2;

    printf("Enter first array size: ");
    scanf("%d", &s1);

    int arr1[s1];

    printf("Enter second array size: ");
    scanf("%d", &s2);

    int arr2[s2];
    printf("Enter first array values: ");
    for(int x = 0; x < s1; x++)
    {
        scanf("%d", &arr1[x]);
    }

    printf("Enter second array values: ");
    for(int y = 0; y < s2; y++)
    {
        scanf("%d", &arr2[y]);
    }
    
    printOdd(arr1, arr2, s1, s2);
}

方案二:先输出第一个奇数,后续奇数前加逗号

这种方法无需提前统计总数,逻辑更简洁:先找到第一个奇数直接输出,之后每遇到一个奇数,先输出逗号再输出数字,从根源避免末尾逗号:

#include<stdio.h>

void printOdd(int arr1[], int arr2[], int s1, int s2) {
    int hasPrinted = 0; // 标记是否已输出第一个奇数

    // 处理第一个数组
    for (int i = 0; i < s1; i++) {
        if (arr1[i] % 2 != 0) {
            if (hasPrinted) printf(", ");
            printf("%d", arr1[i]);
            hasPrinted = 1;
        }
    }

    // 处理第二个数组
    for (int i = 0; i < s2; i++) {
        if (arr2[i] % 2 != 0) {
            if (hasPrinted) printf(", ");
            printf("%d", arr2[i]);
            hasPrinted = 1;
        }
    }
}

int main(void)
{
    int s1, s2;

    printf("Enter first array size: ");
    scanf("%d", &s1);

    int arr1[s1];

    printf("Enter second array size: ");
    scanf("%d", &s2);

    int arr2[s2];
    printf("Enter first array values: ");
    for(int x = 0; x < s1; x++)
    {
        scanf("%d", &arr1[x]);
    }

    printf("Enter second array values: ");
    for(int y = 0; y < s2; y++)
    {
        scanf("%d", &arr2[y]);
    }
    
    printOdd(arr1, arr2, s1, s2);
}
测试验证

用你提供的第二个测试用例验证:
输入:

Enter first array size: 3
Enter second array size: 3
Enter first array values: 5 6 10
Enter second array values: 12 41 36

输出为:5, 41,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:16:13