输入
二维数组
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>matrix[i][j];
}
}
预先不输入数据的组数
1. while(cin>>a>>b){
2. cout<<a+b<<endl;
3. }
预先知道数据组数
1. cin>>n;
2. for(int i=0; i<n; i++){
3. int a,b;
4. cin>>a>>b;
5. cout<<a+b<<endl;
6. }
只有一组数据
1. cin>>a>>b;
2. cout<<a+b<<endl;
整行输入(cin.get
,getline
)
int N;
cin>>N;
char c;
cin.get(c); /* ignore '\n' */
string str;
while(getline(cin,str)){
/* 处理每行的输入 */
}
按空格分割字符串(stringstream
)
void split(string& str){
vector<string> rec;
string result;
stringstream input(str);
while(input>>result){
rec.emplace_back(result);
}
}
输出
不需要输出case数
1. cin>>n;
2. for(int i=0; i<n; i++){
3. int a, b;
4. cin>>a>>b;
5. cout<<a+b<<endl;
6. }
需要输出case数
1. cin>>n;
2. for(int i=0; i<n; i++){
3. int a, b;
4. cin>>a>>b;
5. cout<<"Case"<<i+1<<a+b<<endl;
6. }
每个case之后有空行
1. for(int i=0; i<n; i++){
2. int a, b;
3. cin>>a>>b;
4. cout<<"Case"<<i+1<<a+b<<endl<<endl;
5. }
两个Case之间有空行
1. cin>>n;
2. for(int i=0; i<n; i++){
3. int a, b;
4. cin>>a>>b;
5. if(i>0){
6. cout<<endl;
7. }
8. cout<<"Case"<<i+1<<a+b<<endl;
9. }
处理细节和技巧
输入
不用保存所有组的输入,读一组算一组
“可恶”的字符串——带空白
- scanf, cin之类都读到空白结束
- gets, cin.getline。再自己parse
- 用scanf, gets代替cin。
输出
注意格式
- 字母大小写
- 什么时候换行
- 输出“case”后面有没有“#”或者“:”之类。
- 每行末尾有\n,但一般没有空白
用printf代替cout。
OJ常见状态内存超限——使用内存过多
- 返回非零——main函数返回了非零值
- 浮点错误——除以零
- 运行错误——指针乱指
- 段错误——指针越界