acm中PE错误,求解
发布网友
发布时间:2023-03-19 18:51
我来回答
共1个回答
热心网友
时间:2023-10-03 09:38
出了PE算法就没问题了,问题出在输出格式上面,一般多出在误解题中输出的要求或输出数据中间的分隔符空格(由于看不到,所以不易察觉)。最后一个输出数据后面一般是不能再有分隔符的。一般排除的方法是将空格替换成# 之类输出时能看到的字符,这样测试的时候就可以察觉。
例如 题目输出的要求是:
230 10 1000 500 399
500
将其中的空格替换成# 就变成
230#10#1000#500#399
500
但是你的输出是:
230#10#1000#500#399# (最后多一个)
500# (同样最后多一个)
你可以将下面语句修改一下
for(int k=0;k<j;k++)
cout<<a[k]<<" ";
改为
for(int k=0;k<j-1;k++)
cout<<a[k]<<" "; //输出到倒数第二个
cout<<a[k]; //输出最后一个
空行指的是一行中没有任何输出,只需 endl 不需要空格
if(a[0]=='\0')
cout<<" "<<endl;
这段在你的意思来看是表示没有超出标准成绩的人?这。。。a[0]它是一个int 你干吗要写成a[0]=='\0'?。虽然没错,但是多此一举。完全可以a[0]==0,简洁又明了。你那么些会让别人认为a[0]是char。而且在这程序中 这个if 根本一点用都没有。因为数组a 根本没初始化 所以a[0]的初始值不一定是0.即使你把它初始化了,也是多余的。
f(a[0]=='\0')
cout<<" "<<endl;
else {
cout<<endl;
for(int x=0;x<j;x++ )
cout<<a[x]<<" ";
cout<<endl;
}
改成:
cout<<endl;
for(int x=0;x<j;x++ )
cout<<a[x]<<" ";
cout<<endl;