应对我院C++上机考试/作业的一些小技巧

来源:互联网 发布:软件测试教学视频 编辑:程序博客网 时间:2024/06/07 03:12

这是一篇完全没有排版的文章。

由于作者完全不懂如何排版,所以看起来会有点丑。

0.利用重定向输入输出来更快速的解决测试用例的问题

想必大家都知道用文件来读写的话可以解决测试用例太难输入的问题,我这里推荐的是使用freopen,这个函数的详细介绍见http://en.cppreference.com/w/cpp/io/c/freopen

来举个例子

/**ID: Wan ZhongTASK: prefaceLANG: C++**/#include <iostream>#include <string>#include <cstdio>using namespace std;string s = "IVXLCDM";int count[7];int base[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};string str[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};void deal(int n);void show();int main() {freopen("preface.in", "r", stdin);freopen("preface.out", "w", stdout);int n;cin >> n;for(int i = 1; i <= n; i++) {deal(i);}show();}void show() {for(int i = 0; i < s.length(); i++) {if(count[i]) {cout << s[i] << " " << count[i] << endl;} else {break;}}}void deal(int n) {string roman = "";int i = 0;while(n != 0) {if(n >= base[i]) {n -= base[i];roman += str[i];} else {i++;}}for(int j = 0; j < roman.length(); j++) {for(int k = 0; k < s.length(); k++) {if(roman[j] == s[k]) {count[k]++;break;}}}}

这是我写的一段代码,请先不要吐槽为什么写那么丑,把关注点放在main函数的前2行,你会发现跟Java比或者跟C++其他文件读写方式想比,如果需要把代码提交上去跑测试用例,你势必是要把文件读写改成标准输入输出的,用freopen的好处在于你只需要把这两行注释掉就能直接提交。当然我知道很多人会忘记在提交前注释掉这行,我也没有办法啊。。。你看着全都WA了心里还没有点数?

1.在平时作业时也可以用重定向获取所有的测试用例以方便自己判断助教是不是把测试用例写错了。至少在我们这一届的时候,助教是经常会出一些奇怪的错误,你可以把测试用例利用重定向保存到本地,然后跟同学对答案。。。

2.在有些时候,你可能会遇到int整数溢出的情况,这时候你应该使用的是一个个把int换成long long 而不是使用#define int long long这种操作,因为你会把int main给换掉

3.说到#define,我需要给一些视力不好的同学一些建议,你可以在代码一开始就写一行

#define mian main
以防止自己出现编译无论如何都通过不了的情况。。。

4.有的时候需要输出一个数组,在最后一个元素后面换行,而不需要输出空格,我个人曾经比较喜欢的写法是这样的:

cout << a[0];for(int i = 1; i < n; i++) {    cout << " " << a[i];}cout << endl;


后来吃了亏,因为数组是空的。。。
然后有种写法是这样的:
bool first = true;for(int i = 0; i < n; i++) {    if(first){        first = false;        cout << a[i];    } else {        cout << " " << a[i];    }}cout << endl;
这个显然会好一些,不过还是有点烦,你其实可以这样:
for(int i = 0; i < n; i++) {    printf("%d%c", a[i], " \n"[i == n]);}

虽然这个还是应付不了数组为空的情况,但是一般情况够用了。。。如果真有可能出现数组为空的情况,建议具体情况具体分析,因为有的时候如果数组是空的,题目有可能要求什么都不输出,也有可能要求输出一个换行。
----------------------------------------------------2017.8.11------------------------------------如有遗漏以后再补------------------------------------------------------------------------------------------------------


原创粉丝点击