第二组小组笔记1

以下是我们小组水题遇到问题时总结出的一些解决方法,为了减少在日后踩坑的几率。
1.做题很多时候会遇到PE这样烦人的情况是因为题目有个隐藏要求(有些题目会直接说明),数字直接需要空格隔开,而最后一个数字后面不需要带空格。之所以会判定PE,就是因为我们输出时会惯性写成这样从而导致格式错误。

printf("%d ");

因此,经过交流学习总结得出一个比较万用的方法:

for(i=0;i

2.runtime error的发生情况
1)对0求余或除以0
2)指针越界
3)数组越界
4)定义的数组过大

3.PE真的很烦人---2023(http://acm.hdu.edu.cn/showproblem.php?pid=2023)
1)控制输出两个数字间的空格的时候要注意m、n有不同的含义,要理清他们在该循环中的作用,一用反就会报PE。

image.png

image.png

2)用来作判断的flag的初始化为0要放在循环前面,否则flag会变得没有意义,从而PE。


image.png

4.注意区分scanf和gets的使用,scanf不能接受空格、制表符Tab、回车等,而gets能够接受。

而机器会有一个bug,机器输入全部都是输入不带空格的一长整行字符串,所以这就是为什么2027(http://acm.hdu.edu.cn/showproblem.php?pid=2027)
上会出现在编译器里很明显错误的答案去到了OJ上summit居然能AC的情况。
这是在写完后逛讨论区看到的代码,好奇之下拿去跑了一下,当时很是不解,在与朋友交流下问题得到了解决。

image.png

5.getchar()合理运用的问题
不能凡是都要getchar(),要弄清楚为什么要getchar(),并了解其原理。
不然的话就很容易采坑。
比如说oj-2029(http://acm.hdu.edu.cn/showproblem.php?pid=2029)

image.png

先进入循环再getchar()输出的结果显然是不对的,它会先把输入的第一个字母吞掉再进行判断。


image.png

而正确的做法是在循环之前getchar(),这样子才能成功AC。(ps:单纯删掉getchar()会使数据最后一行没办法输入,因为gets()能读回车。当你输入了n以后按下回车的时候,会把你的回车当成数据读进去,从而影响了最后一行数据的输入)

6.2030统计汉字(汉字机内码特点)(http://acm.hdu.edu.cn/showproblem.php?pid=2030)
原理:中文为两个字节,且最高位都为1 (<0)
ASCII: 最高位为0
也可以直接利用ASCII的范围在0-127这个特点求解(认为不是ASCII码即为汉字)

你可能感兴趣的:(第二组小组笔记1)