Figurer123 2017-09-19 07:00 采纳率: 0%
浏览 830
已结题

这段代码哪里错了?C++ 转 C 测试

这是PTA的一道题,原来的是C++代码,看了之后结合自己的C代码做了修改,但是编译后不能通过全部测试点,是我哪里没考虑到么?希望大神帮忙看看,谢谢!

这是C++代码(AC-code):

 #include <iostream>
/*
* author:Fayne
* time:2015-9-2 21:24:16
*thisSum用于保存临时序列之和,maxSum更新最大序列和
*left, right分别表示最大序列的左右序号,tempLeft保存临时左端的序号
*/
using namespace std;
int A[10010];

int main()
{
    int k, i;
    cin >> k;
    for (i = 0; i<k; i++)
        cin >> A[i];
    int left = 0, right = k - 1, maxSum = -1, thisSum = 0, tempLeft;//maxSum赋初值为-1为了解决出现全部序列为负的情况 
    for (i = 0; i<k; i++)
    {
        thisSum += A[i];

        if (thisSum > maxSum)//如果临时序列和大于最大和,则更新最大和 
        {
            maxSum = thisSum;
            left = tempLeft;//将临时左端的序号赋值给左端序号 
            right = i;
        }
        else if (thisSum < 0)//thisSum小于0时,从此刻下一个开始重新求和 
        {
            thisSum = 0;
            tempLeft = i + 1;//把此刻的下一序号赋值给临时左端序号 
        }
    }
    if (maxSum < 0)//maxSum < 0 说明整个序列全为负数,根据题意,最大和应该为0 
        maxSum = 0;
    cout << maxSum << " " << A[left] << " " << A[right] << endl;

    return 0;
}

这是我写的C代码(基本全错):

 #include<stdio.h>
#include<stdlib.h>

#define LEFT 0
#define RIGHT 1

int MaxSubseqSum4(int A[], int N, int Index[]);

int main()
{
    int K;
    scanf("%d", &K);
    int *A = (int *)malloc((sizeof(int)) * K);
    for (int i = 0; i < K; i++)
        scanf("%d", &A[i]);

    int Index[2] = { 0,K - 1 };
    int Result = MaxSubseqSum4(A, K, Index);

    printf("%d %d %d", Result, Index[LEFT], Index[RIGHT]);

    return 0;
}

int MaxSubseqSum4(int A[], int N, int Index[])
{
    int ThisSum, MaxSum;
    int i;
    int left = 0;
    ThisSum = 0;
    MaxSum = -1;
    for (i = 0; i < N; i++) {
        ThisSum += A[i];
        if (ThisSum > MaxSum) {
            MaxSum = ThisSum;
            Index[LEFT] = left;
            Index[RIGHT] = i;
        }
        else if (ThisSum < 0) {
            ThisSum = 0;
            left = i + 1;
        }
    }
    if (MaxSum < 0)
        MaxSum = 0;

    return MaxSum;
}
  • 写回答

5条回答

  • Figurer123 2017-09-19 07:25
    关注

    这是C++代码:
    图片说明
    这是我的C代码:
    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?