最大子序列和与软件调试

#include<stdio.h>
#define N 1000
#define INF 10000
int maxsubsum(int * arr, int Size)
{
    int maxSum = -INF;
    int sum = 0;
    for(int i = 0; i < Size; i++)
    {
        if(sum < 0)
        {
            sum = arr[i];
        }
        else
        {
            sum += arr[i];
        }
        if(sum > maxSum)
        {
            maxSum = sum;
        }
    }
    return maxSum;
}
int main()
{
    int MSS;
    int i;
    int j=0;
    int arr[N]={0};
    char c;//用来判断何时停止输入的
    printf("input N number:\n");
    for(i=0;i<N;i++)
    {
        scanf("%d",&arr[i]);
         scanf("%c",&c);
        j++;//计数器
        if(c=='\n')//打入回车则自动结束
        {
          break;
        }
    }
    for(i=0;i<j;i++)//原数组打出屏幕
    {
        printf("%d  ",arr[i]);
    }

    printf("\n");
    MSS=maxsubsum(arr,j);
    printf("Mss=%d\n",MSS);
    return 0;

}

 以上是修改后的代码。

 原先的函数代码:

int maxsubsum(int a[N])
{
    int maxsum=0,thissum=0;
    int j;
    for(j=0;j<N;j++)
    {

        thissum+=a[j];

        if(thissum>maxsum)
            maxsum=thissum;
        else if(thissum<0)
            thissum=0;
    }
    return maxsum;
}

进行调试:

 

 

 这就出现了错误

所以应该先将maxsum定义为负无穷。而sum不能赋值为0 ,而是a[i].

问题解决

当序列和大于32位时会溢出,可以将mss变量定义为long int 类型

周活动总结

10.14

  听课 编写程序 查资料 日总计
周三        
周四 2 1 0 3
周五        
周六        
周日 0 2 1 3
周总结 2 2 1 6

时间记录日志

日期 开始时间 结束时间 净时间 活动
10.11 10.00 12.00 120min 听课,写课堂作业
10.14 9.00 12.30 3h 编程并调试
         

 

附上照片

猜你喜欢

转载自www.cnblogs.com/1742031541lh/p/9785736.html