一道C语言编程题,求大神解答,急!!!

众所周知,沫沫酱以火锅为生。。在E8的聚餐活动中,他经常卖萌卖无辜领着大家吃火锅。。
有一天,沫沫听说学校附近的哺呷哺呷在某现充的赞助下有一个优惠活动,只需30软妹币,对个客人,它会上N道菜,但是客人只能挑选其中连续上的一些菜。
于是他非常兴奋的拉着灰灰和渣渣去吃火锅去啦。

沫沫是一个十分挑食的人,所以他对每一道菜都有一个愉快度(当然因为他的挑食,某些事物的愉快度会是负数)。
为了让沫沫能非常愉快的享受这次聚餐,善解人意的灰灰和渣渣决定帮他计算,他们应该怎么选择菜才能使沫沫最开心地吃完这次聚餐。

输入:
第一行是一个整数T,(T <= 10)表示测试案例的个数
对于每个测试案例,第一行是一个整数N,( 1<=N <= 10000)表示菜的个数
接下来的N个数字,第i个数字si表示沫沫对第i道菜的愉快度。( -1000 <=si <= 1000)

PS:由于CF又被血虐掉rating,所以沫沫的起始愉快度是0
PPS:沫沫完全可能得到一个为负值的愉快值, poor 沫沫。。
输出:
对于每个样例,输出一个数字,表示沫沫吃完之后愉快度的最大值。

HINT:
对于 5
6 -1 5 4 -7
我们选择6, -1, 5, 4这四道菜(注意必须是连续的,所以不能跳过-1)
我的程序:
#include <stdio.h>
int pleasant(int n)
{
int max=0;/*最大愉快度, 初始值0*/
int index=0;
int i;
for (i=0;i<n;i++)
{
int si;
scanf("%d",&si);
if(index<0)
{
index=0;
}
index+=si;
if(index>max)
{
max=index;
}
}
return max;
}
int main(int argc, char const *argv[])
{
int t;
scanf("%d", &t);
while (t--)
{
int n;
scanf("%d",&n);
printf("%d\n",pleasant(n));
}
return 0;
}
有一个测试用例过不了但是不知道是什么,求大神帮忙看看,或者再给我一个程序,不要太复杂,我刚学C语言2个月而已。

提问的艺术(中文版)
在网络世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度, 同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案……
不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。
提问之前(Before You Ask)
在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到: 1. 通读手册,试着自己找答案。
2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。 3. 在网上搜索(个人推荐google~~~)。 4. 向你身边精于此道的朋友打听。
当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。
周全的思考,准备好你的问题,草率的发问只能得到草率的回答,或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
小心别问错了问题。
另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。“谁能给点提示?”、“我这个例子里缺了什么?”以及“我应该检查什么地方?”比“请把确切的过程贴出来”更容易得到答复。因为你显得只要有人指点正确的方向,你就有完成它的能力和决心。
怎样提问 (When You Ask)
谨慎选择论坛
小心选择提问的场合。如果象下面描述的那样,你很可能被忽略掉或者被看作失败者: 1. 在风马牛不相及的论坛贴出你的问题
2. 在探讨高级技巧的论坛张贴非常初级的问题;反之亦然 3. 在太多的不同新闻组交叉张贴
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-07-29
#include <stdio.h>

int pleasant(int n) {
int sum,max = 0;/*最大愉快度, 初始值0*/ 
int i,j,start,si[10000];
for(i = 0;i < n;i++) scanf("%d",&si[i]);
for(i = 1; i <= n; ++i) {
for(start = 0; start <= n - i;++start) {
sum = 0;
for(j = start; j < start + i; ++j)
sum += si[j];
if(sum > max) max = sum;
}
}
return max; 


int main(int argc, char const *argv[]) {
int T,n;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
printf("%d\n",pleasant(n));
}
return 0;
}

追问

有两个用例通不过哦,不过不知道是什么,一个是结果错误,一个是运行时间超出限值

追答

我不敢保证运行时间是否超时,但相信结果是对的。你把例子发上来。

追问

他没有把例子写出来。。。我的代码也是那个例子错误。。估计是个特殊值

追答

如果想降低时耗,可把函数pleasant()的功能放在main()函数中进行,可以省掉函数调用的时间,但收效甚微,耗时主要发生在三重循环中,但这是不能少的,因为没有给出可选菜品个数,所以只能从每次选一个、两个、.....、n个。

本回答被提问者和网友采纳
第2个回答  2015-05-02
沫沫可以不从第一个菜开始吃哦
相似回答