程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> #1003 Max Sum,

#1003 Max Sum,

編輯:關於C語言

#1003 Max Sum,


http://acm.hdu.edu.cn/showproblem.php?pid=1003

給你一串數列,讓你求出其中 一段連續的子數列 並且 該子數列所有數字之和最大,輸出該子數列的和、起點與終點序號。

具體細節不再贅述,看原題就好了。

說實話我覺得這個題有點難。。。想了好久,智商不夠。。。

 但實際的代碼還算是相當簡單的,主要的邏輯就在中間那兩個 if 裡了,仔細看看就能理解了。

#include<stdio.h>
#include<string.h>

int main()
{
    int lop, test_case, test_case_timer = 0;
    int input_count, number[100000];
    int max, first, last, temp, sum;

    scanf("%d", &test_case);
    while (test_case_timer < test_case)
    {
        memset(number, 0, sizeof(number));
        first = 0;
        last = 0;
        temp = 0;
        sum = 0;
        max = -1001;

        scanf("%d", &input_count);
        for (lop = 0; lop < input_count; lop++)
        {
            scanf("%d", &number[lop]);
            sum += number[lop];
            if (sum > max)
            {
                max = sum;
                first = temp;
                last = lop;
            }
            if (sum < 0)
            {
                sum = 0;
                temp = lop + 1;
            }
        }

        printf("Case %d:\n", test_case_timer+1);
        printf("%d %d %d\n", max, first + 1, last + 1);

        if (++test_case_timer != test_case)
        {
            printf("\n");
        }
    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved