题解 | #牛牛的数组匹配#

牛牛的数组匹配

http://www.nowcoder.com/practice/3d3406f4a7eb4346b025cc592be5b875

#include<math.h>
int main() {
    int n, m, val;
    scanf("%d %d", &n, &m);
    int a[n], b[m], suma = 0, sumb = 0;
    for (int i = 0; i < n; i++) {  //依次输入a数组的元素
        scanf("%d ", &a[i]);
        suma += a[i];  //求a数组和
    }
    int val1 = suma, max1 = m, min1;
    for (int i = 0; i < m; i++) {  //依次输入b数组的元素
        scanf("%d ", &b[i]);
        sumb += b[i];  //求b数组和
    }
    if (suma < sumb) {  //如果a数组和小于b数组和时
        for (int i = 0; i < m; i++) {  //从第一个数开始计算
            sumb = 0;
            for (int j = i; j < m; j++) {  //从i个数开始往后求和
                sumb += b[j];
                if (j == i)  //每次i值改变时重新赋值
                    val = fabs(suma - sumb);
                //若当前b数组和值与a数组和的差小于上一次的差值时
                if (fabs(suma - sumb) < val)  
                    val = fabs(suma - sumb);
                //若当前b数组和值与a数组和的差大于上一次的差值时结束循环
                if (fabs(suma - sumb) > val) {
                    //若当前差值小于前几次计算的最小差值
                    if (val < val1) {
                        val1 = val;
                        min1 = i;
                        //因循环是在差值大于上一次的差值时结束的
                        //这里的j是在最大位置后一位,所以要减1
                        max1 = j - 1;
                    }
                    break;
                }
            }
        }
    }
    //若b数组之和小于a数组之和,就可以直接输出所有值,无需判断
    else {
        min1 = 0;
        max1 = m - 1;
    }
    //根据不同情况不同输出
    //这块是因为上面个别案例判断暂时没找到解决方案,就从输出直接解决了
    if (max1 != m) {
        for (int i = min1; i <= max1; i++)
            printf("%d ", b[i]);
    } else {
        for (int i = min1; i < max1; i++)
            printf("%d ", b[i]);
    }
    return 0;
}
全部评论

相关推荐

昨天 22:55
已编辑
叮咚买菜
牛客吹哨人:建议细说...哨哥晚点统一更新到黑名单:不要重蹈覆辙!25届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1317104
叮咚买菜稳定性 10人发布 投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
头像 会员标识
昨天 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务