九度 OJ 1554 区间问题

题目来源http://ac.jobdu.com/problem.php?pid=1554

题目描述

给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整数k。

输入

输入包含多组测试用例,每组测试用例由一个整数n(1<=n<=10000)开头,代表数组的大小。
接下去一行为n个整数,描述这个数组,整数绝对值不大于100。
最后一行为一个整数k(大小在int范围内)。

输出

对于每组测试用例,若存在这个连续区间,输出其开始和结束的位置,s,e(s <= e)。
若存在多个符合条件的输出,则输出s较小的那个,若仍然存在多个,输出e较小的那个。
若不存在,直接输出"No"。

样例输入

5
-1 2 3 -4 9
5
3
-1 2 -3
7
2
-1 1
0

样例输出

2 3
No
1 2

代码

我的代码,如下,5项测试,通过两项,囧,求交流,求指导

#include
int main()
{
    int n,s,e,k;
    int arr[10001];
    while(scanf("%d",&n) != EOF)
    {
        int min = n + 1,max = n;
        int i = 0,j;
        for(i = 0;i < n;i++)
            scanf("%d",&arr[i]);
        scanf("%d",&k);
        for(i = 0;i < n;i++)
        {
            long tmp = 0;
            int flag = 0;
            for(j = i;j < n;j++)
            {
                tmp += arr[j];
                if(tmp == k)
                {
                    s = i + 1;
                    e = j + 1;
                    if(min > s && max >= e)
                    {
                        min = s;
                        max = e;
                    }
                    flag = 1;
                    tmp = 0;
                    break;
                }
            }
            if(flag == 1)
                break;
        }
        if(min <= max)
            printf("%d %d\n",min,max);
        else
            printf("NO\n");
    }
    return 0;
}



你可能感兴趣的:(九度OJ,c,九度,OJ,1554)