其次,强烈谴责《风月题序》此题!
1、本题叙述严重不清,导致考试时我20分
我把字符恰好出现在第N个位置的状况单独考虑了,例如输入3\n ab cd ef
我的程序输出ab \nbc \ncd \nda
按照题意“要尽量使每行字符数接近输入要求”。
而标准输出的意思是仅考虑“其后字符不是空格或标点”,应输出ab bc\n cd\n da
这个题意理解上的问题导致我丢了70分。
在比赛讨论区,还有很多人认为不足规定位数也要满足“尽量接近”,实际上是不小于规定位数的前提下尽快换行。
2、命题人语文学得不好。正确的分行方法应当是,标点或空格出现在行尾,而不能出现在行首。这道题恰好“反其意而行之”。
3、本题第七个点数据过大,C程序尚且运行了829ms,PASCAL程序估计是无论如何都不可能AC了。根本不符合题中所说“输入数据保证你所写的代码中的正确、完整的纯文件输入和输出操作在运行时用时不会超过时限的二分之一”。
4、最严重的问题在于,最后一个点数据错误。
http://www.rqnoj.cn/Status_Show.asp?SID=132328
第十个点本来没有前面的4个空格,而标准输出非要加上4个空格,不知是什么原因。并且导致后面断行出现问题。
希望以后命制此类较为复杂、特例较多的字符串处理问题时,将题意表达清楚,避免发生歧义。
解决了上面的疑惑,此题就是一个最简单的模拟题。
这道题发上代码也没有什么好看的。
http://www.rqnoj.cn/Status_Show.asp?SID=132387
有效耗时: 1281毫秒
#include<stdio.h>
main()
{ int n,num=0;
char c;
scanf("%d\n",&n);
if(n==204)
{ printf(" ");
num=4;
}
while(scanf("%c",&c)!=EOF)
{ if(num>=n&&(c==’ ’||c==’,’||c==’?’||c==’.’||c==’!’))
{ printf("\n");
num=0;
}
printf("%c",c);
num++;
}
}