注册 登录
编程论坛 C++教室

源程序代码分析

醉生梦死 发布于 2007-11-13 11:41, 1588 次点击

题目地址:

http://acm.jlu.edu.cn/joj/showproblem.php?pid=1995

我的代码:
#include <iostream>
using namespace std;

int main()
{
int n;
while (cin >> n && n != -1)
{
int a[n+1];
for (int i = 0;i <= n;i ++)
a[i] = 0;

for (int k = 1;k <= n;k ++)
cin >> a[k];
int sum = 0;
int b = 0;

for (int i = 1;i <= n;i ++)
{
if (b > 0) b += a[i];
else b = a[i];
if (b > sum) sum = b;
}
cout << sum << endl;
}
}


一直wa,郁闷

20 回复
#2
海子星竹2007-11-13 11:55
你的数组能那样定义嘛??
#3
孤魂居士2007-11-13 23:08
顶楼上的  
#4
醉生梦死2007-11-14 09:59
回复:(海子星竹)你的数组能那样定义嘛??

有什么不妥?我自己运行没有错啊

#5
醉生梦死2007-11-14 12:28

自己再顶上去,求教!问什么不能ac,自己测试了不少数据,没错

#6
jonc2007-11-14 15:53

那样定义数组好像不行吧
我改了下,结果如下:
#include <iostream>
using namespace std;

int main()
{
int n;
cout<<"input the lenth-1(-1 to end):";
while (cin >> n && n != -1)
{
int *a=new int[n+1];
for (int i = 0;i <= n;i ++)
a[i] = 0;

for (int k = 1;k <= n;k ++)
{
cout<<"input a["
<<k
<<"]:";
cin >> a[k];
}
int sum = 0;
int b = 0;

for ( i = 1;i <= n;i ++)
{
if (b > 0)
b += a[i];
else
b = a[i];
if (b > sum)
sum = b;
}
cout <<"the sum is:"<< sum << endl;
cout<<"input the lenth-1(-1 to end):";
}
return 0;
}
结果
input the lenth-1(-1 to end):4
input a[1]:1
input a[2]:2
input a[3]:3
input a[4]:4
the sum is:10
input the lenth-1(-1 to end):-1

#7
醉生梦死2007-11-14 22:07
回复:(jonc)那样定义数组好像不行吧我改了下,结果...
依然不能ac
#8
中学者2007-11-15 00:05
定义数组的时候不能用变量啊????除非你用动态分配~~~雾...........
#9
aipb20072007-11-15 01:24
回复:(醉生梦死)源程序代码分析
睡觉之前来泡泡!

我给你个测试数据

3
-3 -2 -1

#10
duccdd2007-11-15 16:26
我连编译都不通过
#11
醉生梦死2007-11-15 18:32
回复:(aipb2007)回复:(醉生梦死)源程序代码分析...

我考虑问题总是不全面:
通过无限大哥提供的数据,给程序打了个“补丁”ac了,谢谢啦

#include <iostream>
using namespace std;

int main()
{
int n;
while (cin >> n && n != -1)
{
int *a = new[n+1];
for (int i = 0;i <= n;i ++)
a[i] = 0;
int uzero = 0;
int max = -999999;
for (int k = 1;k <= n;k ++)
{
cin >> a[k];
if (a[k] < 0)
{
uzero ++;
if (a[k] > max)
max = a[k];
}
}
int sum = 0;
int b = 0;
if (uzero == n)
cout << max <<endl;
else
{
for (int i = 1;i <= n;i ++)
{
if (b > 0) b += a[i];
else b = a[i];
if (b > sum) sum = b;
}
cout << sum << endl;
}
}
}

#12
zjm1232007-11-15 21:35
int a[n+1];
这个是怎么回事?
#13
cz5223212007-11-15 21:40
对,定义数组的时候不能用变量!
#14
醉生梦死2007-11-15 23:03
回复:(zjm123) int a[n+1];这个是怎么回事?
我写的不规范,但是在g++下编译的确没有错,不过我的这种写法很不规范,也不合逻辑,以后一定改,谢谢指出毛病
#15
zkkpkk2007-11-15 23:16

你确认你没有搞错?数组分配在栈中(int array[n+1])是不能用变量的,分配在堆中(int* array = new int[n+1])才可以用变量。

#16
醉生梦死2007-11-15 23:17
回复:(zkkpkk)你确认你没有搞错?数组分配在栈中(...
我知道这样写不对,但在g++下编译的确就是没有报错
#17
zkkpkk2007-11-15 23:17
以下是引用醉生梦死在2007-11-15 23:03:44的发言:
我写的不规范,但是在g++下编译的确没有错,不过我的这种写法很不规范,也不合逻辑,以后一定改,谢谢指出毛病

你在LINUX下?或许GCC支持吧

#18
醉生梦死2007-11-15 23:25
回复:(zkkpkk)以下是引用醉生梦死在2007-11-15 23:...
windows下的
#19
aipb20072007-11-16 00:20

以前一个大师告诉我这是可以的,但是我一直没找到理论支持这个。
所以还是按标准形式来!

#20
大口木瓜2007-11-18 11:14
以下是引用中学者在2007-11-15 0:05:08的发言:
定义数组的时候不能用变量啊????除非你用动态分配~~~雾...........

他那个n 不是键盘输入的??
我也不明白了。。。。请教

#21
parksun2007-11-19 14:55

我的也是

1