核心
- 循环输入int或string型:
while(cin>>x){...}
- 以换行作为结束标志:
if(cin.get()=='\n'){...}
- 根据需求判断 实时计算 还是 存储每个输入
- 整型的取值范围:int还是long long
- 字符串分割splitString函数的编写与封装(见字符串排序(3))
A+B
A+B(1)
#include<iostream>
using namespace std;
int main(){
int a,b;
while(cin>>a>>b)
cout<<a+b<<endl;
return 0;
}
A+B(2)
#include<iostream>
using namespace std;
int main(){
int t,a,b;
cin>>t;
for(int i=0;i<t;i++){
cin>>a>>b;
cout<<a+b<<endl;
}
return 0;
}
A+B(3)
#include<iostream>
using namespace std;
int main(){
int a,b;
while(cin>>a>>b){
if(a==0 && b==0)
break;
cout<<a+b<<endl;
}
return 0;
}
A+B(4)
法一:实时记录数据
#include<iostream>
using namespace std;
int main(){
//法一:实时计算输入的数据
int n;
while(cin>>n){
if(n==0)
break;
int sum=0,x;
for(int i=0;i<n;i++){
cin>>x;
sum+=x;
}
cout<<sum<<endl;
}
return 0;
}
法二:保存每个输入数据
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
int main(){
//法一:实时计算输入的数据
int n;
while(cin>>n){
if(n==0)
break;
vector<int> x(n);
for(int i=0;i<n;i++)
cin>>x[i];
cout<<accumulate(x.begin(), x.end(), 0)<<endl;
}
return 0;
}
A+B(5)
#include<iostream>
using namespace std;
int main(){
int num;
cin>>num;
for(int _t=0;_t<num;_t++){
int n,sum=0,x;
cin>>n;
for(int _i=0;_i<n;_i++){
cin>>x;
sum+=x;
}
cout<<sum<<endl;
}
return 0;
}
A+B(6)
#include<iostream>
using namespace std;
int main(){
int n,x;
while(cin>>n){
int sum=0;
for(int _t=0;_t<n;_t++){
cin>>x;
sum+=x;
}
cout<<sum<<endl;
}
return 0;
}
A+B(7)
#include<iostream>
using namespace std;
int main(){
int n,sum=0;
while(cin>>n){
sum+=n;
if(cin.get()=='\n'){
cout<<sum<<endl;
sum=0;
}
}
return 0;
}
字符串处理
字符串排序(1)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
vector<string> strs(n);
for(int i=0;i<n;i++)
cin>>strs[i];
sort(strs.begin(),strs.end());
for(int i=0;i<n-1;i++)
cout<<strs[i]<<" ";
cout<<strs[n-1];
}
字符串排序(2)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
string s;
vector<string> strs;
while(cin>>s){
strs.emplace_back(s);
if(cin.get()=='\n'){
sort(strs.begin(),strs.end());
int n=strs.size();
for(int i=0;i<n;i++)
cout<<strs[i]<<" ";
cout<<endl;
strs.clear();
}
}
return 0;
}
字符串排序(3)
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
void splitString(const string& s,const string& c,vector<string>& ans){
string::size_type pos1=0,pos2=s.find(c);//pos1为搜索时的起始索引,pos2为找到c的位置
while(pos2!=string::npos){//npos==-1为未找到标志
//记录当前分割的字符串
ans.emplace_back(s.substr(pos1,pos2-pos1));
//更新pos1与pos2
pos1=pos2+c.size();
pos2=s.find(c,pos1);//从pos1开始查找
}
//最后可能剩下一个字符串未处理
if(pos1!=s.size())
ans.emplace_back(s.substr(pos1));
}
int main(){
string s;
while(cin>>s){
vector<string> ans;
splitString(s,",",ans);
sort(ans.begin(),ans.end());
int n=ans.size();
for(int i=0;i<n-1;i++)
cout<<ans[i]<<",";
cout<<ans[n-1]<<endl;
}
return 0;
}
自测本题通过提交为0
#include<iostream>
using namespace std;
int main(){
long long a,b;
while(cin>>a>>b){
long long sum=a+b;
cout<<sum<<endl;
}
return 0;
}