在信息学竞赛的机试中(如CSP-J/S复赛),通常都要求通过文件进行输入输出数据的读写(如下图所示),很多同学平时未进行相关的练习,不熟悉复赛的竞赛规则,导致考试得了零分!
为了让同学们更加从容地应对CSP-J/S的复赛,土豆编程OJ特更新了文件IO功能。
通过文件读写时,我们代码的基础结构如下:
#include<bits/stdc++.h> // 这是万能头文件,在信息学竞赛中很有用,也可以单独使用cstdio头文件以使用freopen方法
using namespace std;
int main() {
// 接下来这两行代码的作用是将输入输出重定向到文件输入输出
// 在竞赛中,in文件一般对应输入文件,对应stdin,注意是"r"(读)
freopen("sum.in", "r", stdin);
// 在竞赛中,out文件一般对应输出文件,对应stdout,注意是"w"(写)
freopen("sum.out", "w", stdout);
// 接下来使用cin, cout、scanf、printf等进行读写即可
// 这两行fclose可以不写,但是一般建议写上。
fclose(stdin);
fclose(stdout);
return 0; // 这个必须是return 0; 否则可能会得0分。
}
注意freopen
的第一个参数需要修改成题目要求的输入输出文件名称。
以CSP-J2022复赛乘方为例,你的代码应该写成:
#include<bits/stdc++.h> // 这是万能头文件,在信息学竞赛中很有用
using namespace std;
int main() {
// 注意这两行代码
freopen("pow.in", "r", stdin);
freopen("pow.out", "w", stdout);
int a, b;
long long s = 1;
cin >> a >> b;
// 特判
if (a == 1) {
cout << "1";
return 0;
}
// 循环模拟乘方运算
for (int i = 1; i <= b; i++) {
s *= a;
// 如果s超过10^9输出-1,否则输出结果
if (s > 1000000000) {
cout << "-1";
return 0;
}
}
cout << s;
// 这两行fclose可以不写,但是一般建议写上。
fclose(stdin);
fclose(stdout);
return 0;
}
在信息学竞赛中,输入输出的文件名请看考试时的题目说明里面的信息。
在土豆编程OJ中,输入输出的文件名请通过鼠标点击左上角的文件IO字样进行查看,如下图所示。
样题
还没找到样题哦。