BalaHan-cc 2021-06-16 10:59 采纳率: 83.3%
浏览 37
已结题

子数组求最大和 C语言

  • 写回答

4条回答 默认 最新

  • 关注
    #include<stdio.h>
    #include<assert.h>
    //连续子数组的最大和
    int MaxNum2(int *arr,int len)
    {
    	assert(arr != NULL && len > 0);
    	int max = 0x80000000;//0x8000 0000是十六进制的最小值
    	int sum = 0;
    	for(int i = 0; i < len;i++)
    	{
    		if(sum <= 0)
    		{
    			sum = arr[i];//当sum<=0时,将第i个指向值给sum
    		}
    		else
    		{
    			sum += arr[i];//否则sum+下个指向值
    		}
    		if(sum > max)//当此sum比上个sum大时,赋值给max
    		{
    			max = sum;
    		}
    	}
    	return max;
    }
    int main()
    {
        int i,n;
        int arr[100];
        scanf("%d",&n);
        for(i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }
    
    	int max = MaxNum2(arr,n);
    	printf("%d\n",max);
    	getchar();
    	return 0;
    }
    //6  0 -6 3 5 1 2
    
    
    int main()
    {
    	int arr[10] = {1,2,-3,5};
    	int len = sizeof(arr)/sizeof(arr[0]);
    	int max = MaxNum2(arr,len);
    	printf("%d\n",max);
    	getchar();
    	return 0;
    }
    

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月20日