提高AC率的可能方法(C语言)
查看原帖
提高AC率的可能方法(C语言)
853903
Ishr_Mla楼主2023/2/5 18:59

每次提交程序之前

使用udebug检查一下输入(或者找讨论区里给的大样例提交自己的程序,看看是否AC),并且检查一下输入输出的顺序(有可能等你输完某个数据才显示Please enter之类的信息)。讨论区里有翻译,可供参考。

如果程序一直崩溃,请检查是否有死循环或者读入错误问题。

难度大小取决于学生信息的存储方式和各部分内容的实现方式

关于udebug的一点说明

不需要对班级人数是否为0进行检查,不管你最终程序输出的average是0.00,nan还是-nan(或者-1#.j等等)

另外,写不写函数,用不用全局变量,用不用结构体不是导致本题WA的根本原因。一直WA的不用从这方面找原因了。

结构体数组长度120到200之间够用,字符串长度11即可。编译器用C++11亲测可行。

格式

参照udebug或者讨论区给的大样例。

检查输入

当进行Remove操作时,只检查输入的是否为0,然后遍历全部学生,寻找可能匹配的SID或者name。而不是检查输入的是否为0,输入的是SID,输入的是name三种情况。这样可以简化代码行数,甚至我的程序就是不这样才WA的

初始化

如果使用数组来存学生信息,在定义数组的时候注意初始化。

Remove的方式

无论是删去当前数组中某一个元素,还是通过平移的方式“挪动”数组,都是可行的。只不过,前者需要将当前元素再初始化一遍,在Show Statistics的时候加一个判断该元素是否是已删除元素的if语句,后者则需要针对平移调整一下循环变量和计数器的更新,并且将最后一个元素初始化。Remove方式的不同会影响到Show Statistic。

举个初始化例子

student[cnt--] = student[MAX_SIZE-1];
//这里的MAX_SIZE大于100

初始化方式不唯一。用memset函数理论可行,但不确保sizeof的运算结果是否为理论值。

Query的方式

排名可以每询问一次排一遍rank。也可以只得到询问学生的rank。

必须存储的信息

学生的SID, CID, 名字和成绩

可以不存的信息

学生的排名,平均分,总成绩(建议还是把总成绩存起来,方便输出),排名,输入的次序

最后一点建议

把每个功能写成函数,把每个函数的部分功能写成子函数。写完一个函数后记得测试一下。用字符串数组存储课程名字。计数器和学生信息可以用全局变量来存。

感谢观看,祝各位尽早AC!

2023/2/5 18:59
加载中...