作者zhichin ()
看板b99902HW
标题关於单班计程期中考
时间Wed Nov 10 20:07:14 2010
单班计程期中考参考解答
http://www.csie.ntu.edu.tw/~r98922165/C2010MidtermSolution.zip
Problem 1 常见问题
1. 计算过程中没有在每次做完乘法以後 mod 1000 导致溢位问题
2. 没有用找cycle的方法来避免重复的计算 导致程式执行时间超过限制
3. 找到cycle以後却不小心算错了...
Problem 2 注意事项
1. 两个字串长度不相等也有可能是similar
因为字串里面非英文字母的字元应该要被无视
很多同学因为搞错这点而失去了很多分数...
2. The length of a string is no more than 100000.
字串的大小应该要宣告成 100000+1 才够
因为要保留储存字串结束字元'\0'的空间
3. 程式的执行时间不能太长
比较快的作法是用阵列存两个字串中a到z出现的"次数" 再进行比对
部份同学先把字串分别排序以後再进行比对 这个作法其实"慢非常多"
另外 执行strlen需要时间 要用变数把strlen的回传值存起来重复使用
for(i=0; i<strlen(s); i++)
{
...
}
上面这段应该改成下面这样
len=strlen(s);
for(i=0; i<len; i++)
{
...
}
Problem 3 常见问题
1. 把座标轴的方向弄错 或是把东和西弄反之类的...
2. 把各种情况用if-else暴力展开 这样的写法虽然没错
但很容易导致漏改一个小细节就拿不到分数的情况
而且程式码会变得比较长 写的时间跟着变得比较久 de bug 也变得比较困难
* 比较简洁的写法可以参考解答 或是来助教的 Office Hour 讨论
Problem 4 常见问题
1. 比对字串A是否在字串S里面的时候 没有注意到超出字串范围的问题
假设 字串A是"apple" 字串S是"anappleapp"
anappleapp
apple
上面的例子中 部分同学的程式只注意不要超过字串A的范围
却没注意到字串S已经对齐到超过范围的地方了
2. 输出的字串长度可能将近 1000+30x150=5500
因为输入的字串长度不超过1000 最多有30个指令 每个指令总长度不超过150
每个指令在最极端的情况下会让1个字元被替代成150个字元(高估)
* 如果真的对处理backward指令有障碍...
可以先把三个字串前後颠倒 然後当成forward指令处理
处理完以後要记得再把处理结果前後颠倒回来
前提是你必须会写处理forward指令的程式
Problem 5 常见问题
1. 自行假设max的最小值为0或其他的值
但是f(x,y)有可能是负数或其他更小的值唷
拿其中一个f(x,y)的值当max的初始值是比较合适的作法
同时别忘了把*index的初始值设成那一个
2. 部分同学宣告阵列储存每个f(x,y)的值
但是阵列的大小可能比测试资料需要的小
或是使用传入的n当阵列大小 会因为阵列大小是变数不是常数而 Compile Error
最重要的是 其实这题不需要宣告一个阵列储存f(x,y)的值
每算出一个f(x,y)就拿去和max比较就好
* Sample Input 和 Sample Output 的用途
各位同学根据题目的叙述写好程式码以後,可以在自己的电脑上编译程式码。
如果产生出来的程式是正确的,执行程式的时候,
把 Sample Input 的内容输入程式,程式输出的资料应该和 Sample Output 相同。
如果程式无法产生出和 Sample Output 相同的结果,表示程式不符合题目的要求,
程式码上传到批改系统自然不会拿到满分。
这次期中考前三题的第一组测试资料都是 Sample Input ,
但是助教发现部份同学上传的程式连第一组测试资料都无法通过。
提供 Sample Input 和 Sample Output 除了帮助各位同学了解输入和输出的格式,
同时希望同学们拿来验证程式的正确性,加速 de bug 的过程,
所以希望各位同学在上传程式码以前,能够先在电脑上测试执行结果。
* C2010 线上批改系统
一份程式码上传到"C2010线上批改系统"之後,程式码会被编译并执行。
产生出来的程式会被输入一些测试资料,如果程式"正常地"执行结束,
批改系统会把该程式的输出资料拿去和正确答案做比对,
根据比对的结果相同与否给分数。
除了答案以外,请不要printf任何不相关的东西,
像是"请输入数字"的提示用语,会让批改系统认为答案是错的!
以上是助教把大部份期中考的上传程式码看过之後
所整理出来的常见问题或注意事项 感谢大家的耐心阅读
如果对於自己的程式码为什麽没有拿到满分还是有疑问
欢迎来助教们的 Office Hour 询问
* 曹佐硕: 星期一 12:00-14:00 @ CSIE R334
* 陈柏龙: 星期二 13:20-14:10,
星期四 13:20-14:10 @ CSIE R217
* 蔡青桦: 星期五 16:00-18:00 @ CSIE R217
助教们的 Office Hour 就是在特定的时段
助教会在特定的地点等大家来问和课程相关的问题
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.46
1F:推 math120908:推!助教辛苦了<(_ _)> 11/10 20:26
2F:→ didiwu:喔不…原来我死在S的字串长度上囧 11/10 22:19
3F:推 s864372002:到期中考还有人会输出提示讯息喔囧。 11/10 23:41
4F:推 pigalan:推!! 助教辛苦了m(_ _)m 11/13 01:03
5F:推 skyly:楼上卡恩!! <(_ _)> 11/13 23:16