- python可以用下面的函数处理输入
n=int(input().strip()) res=list(map(str,input().strip().split())) # a,b=list(map(int,input().strip().split())) # 如果只有两个数据,可通过直接a,b=...赋值 res=sorted(res) res=" ".join(res)
- 如果是二维数据
n=int(input()) if n<=0: print() res=[] for i in range(n): res.append(list(map(str,input().strip().split(', '))))
- C++中,有两种方式来处理(习惯用第一种,因为是一行一行地处理,比较直观; 并且可以灵活处理分隔符)
while(getline(cin,s))
和while (getline(ss,tmp,' '))
一行一行地处理输入 。getline第一个参数是输入流,第二个参数是字符串,第三个参数是分隔符(若没有第三个参数,表示把数据传给字符串s)int main(){ string s; while (getline(cin,s)){ stringstream ss(s); string tmp; vector<string>vec; while (getline(ss,tmp,' ')){ vec.push_back(tmp); } 在此处对向量vec do something... } }
- 一个一个地处理元素,并用
if (cin.get()=='\n')
来判断是否换行。注意:操作完向量后,要记得清空,使其不影响后续操作int main() { int num; vector<int> vec; while (cin >> num) { vec.push_back(num); if (cin.get()=='\n'){ 在此处对向量 do something... vec.clear(); // 注意:要清空向量 } } }
- 如果是二维向量(把数据全部输入后,再处理),则:
当输入整数,按回车,实际上输入的是:整数和换行符号(\n)。cin把整数读进了,但是换行符号没有读。因此如果接下来输入其他内容,首先会读入\n。与题意不符。所以要再加cin.get();
,用于舍弃输入流中的不需要的字符,或者舍弃回车。然后再用getlien()
函数#include <vector> #include <iostream> #include <sstream> #include <algorithm> using namespace std; int main() { vector<vector<string>> vec; string line; int n; cin>>n; // cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车 cin.get(); // 一定要加这一行 for (int i = 0; i < n; ++i) { getline(cin, line); stringstream ss(line); vector<string> v; string item; while (getline(ss, item, ',')) { v.push_back(item); } vec.push_back(v); } for (auto &i : vec) { for (auto &j:i) { cout << j; } cout<<endl; } } ////输入 //2 //1,2,3 //4,5,6 ////输出 //123 //456
A+B(1)
- 可以输入无数次
- 每次输入一行后,输出一行结果
python
import sys
for line in sys.stdin:
a, b = map(int,line.split())
print(a + b)
import sys
for line in sys.stdin:
a = line.split()# a是这样的:['1','2']
print(int(a[0]) + int(a[1]))
while True:
try:
a,b=list(map(int,input().strip().split()))
print(a+b)
except:
break
C++
- 通用
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<long> v){
long res=0;
for (int i = 0; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string s;
while (getline(cin,s)){
stringstream ss(s);
string item;
vector<long> vec;
while(getline(ss,item,' ')){
vec.push_back(stol(item));
}
sum(vec);
}
}
- 一般
#include <iostream>
using namespace std;
int res(int a,int b){
return a+b;
}
int main(){
int a,b;
while(cin>>a>>b){
cout<<res(a,b)<<endl;
}
}
A+B(2)
- 可以输入
t
次 - 每次输入一行后,输出一行结果
python
t=int(input())
for _ in range(t):
a,b=map(int,input().strip().split())
# a,b=list(map(int,input().strip().split())) # 也可以
print(a+b)
C++
- 通用
- 用变量i跳过第一行
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<int> v){
int res=0;
for (int i = 0; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string s;
int i=0;
while (getline(cin,s)){
i++;
if (i==1) continue;
stringstream ss(s);
string item;
vector<int> vec;
while(getline(ss,item,' ')){
vec.push_back(stol(item));
}
sum(vec);
}
}
- 一般
#include <iostream>
using namespace std;
int res(int a,int b){
return a+b;
}
int main(){
int t;
int a,b;
cin>>t;
while(cin>>a>>b){
cout<<res(a,b)<<endl;
}
}
#include <iostream>
using namespace std;
int res(int a, int b) {
return a + b;
}
// 或者
// int main() {
// int t;
// int a, b;
// cin >> t;
// for (int i = 0; i < t; ++i) {
// cin >> a >> b;
// cout << res(a, b) << endl;
// }
// }
A+B(3)
- 可以输入无数次, 但遇到 输入为0 0 时,结束输入 (跳出循环)
- 每次输入一行后,输出一行结果
python
while True:
try:
a,b=map(int,input().strip().split())
if a!=0 and b!=0:
print(a+b)
else:
break
except:
break
C++
- 通用
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<int> v){
int res=0;
for (int i = 0; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string s;
while (getline(cin,s)){
stringstream ss(s);
string item;
vector<int> vec;
while(getline(ss,item,' ')){
vec.push_back(stol(item));
}
if (vec[0]==0 && vec[1]==0) break;
sum(vec);
}
}
- 一般
#include <iostream>
using namespace std;
int res(int a, int b) {
return a + b;
}
int main() {
int a, b;
while (cin >> a >> b) {
if (a == 0 && b == 0) break;
cout << res(a, b) << endl;
}
}
A+B(4)
可以输入无数次, 但如果输入的第一个元素为0,结束输入(跳出循环)
每次输入一行后,输出一行结果
python
while True:
try:
l = list(map(int, input().strip().split()))
if l[0] == 0:
break
else:
print(sum(l[1:]))
except:
break
C++
- 通用
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<int> v){
int res=0;
for (int i = 1; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string s;
while (getline(cin,s)){
stringstream ss(s);
string item;
vector<int> vec;
while(getline(ss,item,' ')){
vec.push_back(stol(item));
}
if (vec[0]==0) break;
sum(vec);
}
}
- 一般
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int res(vector<int> v) {
int sum = 0;
for (auto &i : v) {
sum += i;
}
return sum;
// 或者直接利用累积函数
// return accumulate(v.begin(), v.end(), 0);
}
int main() {
int n;
vector<int> vec;
while (cin >> n) {
if (n == 0) break;
while (n--) {
int i;
cin >> i;
vec.push_back(i);
}
cout << res(vec) << endl;
vec.clear(); // 注意:要清空向量
}
}
A+B(5)
- 可以输入
t
次 - 每次输入一行后,输出一行结果
python
t=int(input().strip())
for _ in range(t):
l=list(map(int,input().strip().split()))
print(sum(l[1:]))
C++
- 通用
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<int> v){
int res=0;
for (int i = 1; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string s;
int i=0;
while (getline(cin,s)){
i++;
if (i==1) continue;
stringstream ss(s);
string item;
vector<int> vec;
while(getline(ss,item,' ')){
vec.push_back(stol(item));
}
if (vec[0]==0) break;
sum(vec);
}
}
- 一般
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int res(vector<int> v) {
int sum = 0;
for (auto &i : v) {
sum += i;
}
return sum;
// 或者直接利用累积函数
// return accumulate(v.begin(), v.end(), 0);
}
int main() {
int n;
vector<int> vec;
int t;
cin>>t;
while (t--) {
cin >> n;
if (n == 0) break;
while (n--) {
int i;
cin >> i;
vec.push_back(i);
}
cout << res(vec) << endl;
vec.clear(); // 注意:要清空向量
}
}
A+B(6)
- 可以输入无数次
- 每次输入一行后,输出一行结果
python
while True:
try:
l=list(map(int,input().strip().split()))
print(sum(l[1:]))
except:
break
C++
- 通用
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<int> v){
int res=0;
for (int i = 1; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string s;
while (getline(cin,s)){
stringstream ss(s);
string item;
vector<int> vec;
while(getline(ss,item,' ')){
vec.push_back(stol(item));
}
sum(vec);
}
}
- 一般
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int res(vector<int> v) {
int sum = 0;
for (auto &i : v) {
sum += i;
}
return sum;
// 或者直接利用累积函数
// return accumulate(v.begin(), v.end(), 0);
}
int main() {
int n;
vector<int> vec;
while (cin >> n) {
// if (n == 0) break; // 和第四题一样,只是注释了这句话
while (n--) {
int i;
cin >> i;
vec.push_back(i);
}
cout << res(vec) << endl;
vec.clear(); // 注意:要清空向量
}
}
A+B(7)
- 可以输入无数次
- 每次输入一行后,输出一行结果
python
while True:
try:
l = list(map(int,input().strip().split()))
print(sum(l))
except EOFError:
break
C++
- 通用
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<int> v){
int res=0;
for (int i = 0; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string s;
while (getline(cin,s)){
stringstream ss(s);
string item;
vector<int> vec;
while(getline(ss,item,' ')){
vec.push_back(stol(item));
}
sum(vec);
}
}
- 一般
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int res(vector<int> v) {
int sum = 0;
for (auto &i : v) {
sum += i;
}
return sum;
// 或者直接利用累积函数
// return accumulate(v.begin(), v.end(), 0);
}
int main() {
int num;
vector<int> vec;
while (cin >> num) {
vec.push_back(num);
if (cin.get()=='\n'){
cout << res(vec) << endl;
vec.clear(); // 注意:要清空向量
}
}
}
字符串排序(1)
- 输入有两行,第一行表示字符串的个数
n
,第二行是输入的n
个字符串 - 每次完整输入后,输出一行结果
python
n=int(input().strip())
res=list(map(str,input().strip().split()))
res=sorted(res)
res=" ".join(res)
# 也可以这样写:res=" ".join(map(str,res))
print(res)
C++ 1
#include <iostream>
#include <vector>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
//打印vector (确保结尾无空格)
void output(vector<string> v) {
sort(v.begin(), v.end());
for (auto i = v.begin(); i < v.end(); ++i) {
if (i != v.end() - 1)
cout << *i << ' ';
else
cout << *i<<'\n';
}
}
int main(){
string s;
int n;
cin >> n;
while (getline(cin,s)){
stringstream ss(s);
string tmp;
vector<string>vec;
while (getline(ss,tmp,' ')){
vec.push_back(tmp);
}
output(vec);
}
}
C++ 2
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n;
cin>>n;
vector<string> str;
while (n--){
string s;
cin >> s;
str.push_back(s);
}
// 确保无结尾空格
sort(str.begin(),str.end());
for (auto i =str.begin() ; i <str.end() ; ++i) {
if (i!=str.end()-1)
cout<< *i<<' ';
else
cout<< *i;
}
}
字符串排序(2)
- 可以输入无数次
- 每次输入(空格隔开)一行后,输出一行结果
python
while True:
try:
l=list(map(str,input().strip().split()))
l=sorted(l)
print(" ".join(l))
except:
break
C++ 1
#include <iostream>
#include <vector>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
//打印vector (确保结尾无空格)
void output(vector<string> v) {
sort(v.begin(), v.end());
for (auto i = v.begin(); i < v.end(); ++i) {
if (i != v.end() - 1)
cout << *i << ' ';
else
cout << *i<<'\n';
}
}
int main(){
string s;
while (getline(cin,s)){
stringstream ss(s);
string tmp;
vector<string>vec;
while (getline(ss,tmp,' ')){
vec.push_back(tmp);
}
output(vec);
}
}
C++ 2
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void output(vector<string> str) {
sort(str.begin(), str.end());
for (auto i = str.begin(); i < str.end(); ++i) {
if (i != str.end() - 1)
cout << *i << ' ';
else
cout << *i<<'\n';
}
}
int main(){
string s;
vector<string> str;
while (cin>>s){
str.push_back(s);
if (cin.get()=='\n'){
output(str);
str.clear();
}
}
}
字符串排序(3)
- 可以输入无数次
- 每次输入(逗号隔开)一行后,输出一行结果
python
while True:
try:
l=list(map(str,input().strip().split(',')))
l=sorted(l)
print(",".join(l))
except:
break
- 当输入的行数不确定时
输入示例:
1 2回车
3 4回车
回车import sys res=[] while True: line = sys.stdin.readline().strip()# 读取该行的内容 如 1空格2 if not line: break lineList = str(line).split(' ') # 以空格间开 res.append(lineList) print(res)# [['1', '2'], ['3', '4']] resNum=[] for i in res: i=list(map(int,i)) resNum.append(i) print(resNum) # [[1, 2], [3, 4]]
C++ 1
和上一题一样,只是把分隔符换成了,
#include <iostream>
#include <vector>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
//打印vector (确保结尾无空格)
void output(vector<string> v) {
sort(v.begin(), v.end());
for (auto i = v.begin(); i < v.end(); ++i) {
if (i != v.end() - 1)
cout << *i << ',';
else
cout << *i<<'\n';
}
}
int main(){
string line;
while (getline(cin,line)){
stringstream ss(line);
string tmp;
vector<string>vec;
while (getline(ss,tmp,',')){
vec.push_back(tmp);
}
output(vec);
}
}
C++ 2
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void output(vector<string> str) {
sort(str.begin(), str.end());
for (auto i = str.begin(); i < str.end(); ++i) {
if (i != str.end() - 1)
cout << *i << ',';
else
cout << *i<<'\n';
}
}
int main(){
string s;
vector<string> vec;
while (cin>>s){
// 把字符串按‘,’分隔,并存进向量vec中
int item_start=0;
for (int i = 0; i < s.size(); ++i) {
if (s[i]==','){
vec.push_back(s.substr(item_start,i-item_start));
item_start=i+1;
}
}
// 还要把最后一个item也存进去
vec.push_back(s.substr(item_start));
if (cin.get()=='\n'){
output(vec);
vec.clear();
}
}
}
自测本地通过
- C++中该题的整数不要用
int
(因为测试用例中有超过int类型的整数) ,要用long
或者long long
python
while True:
try:
l=list(map(int,input().strip().split( )))
print(sum(l))
except EOFError:
break
C++ 1
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<long> v){
long res=0;
for (int i = 0; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string s;
while (getline(cin,s)){
stringstream ss(s);
string item;
vector<long> vec;
while(getline(ss,item,' ')){
vec.push_back(stol(item));
}
sum(vec);
}
}
C++ 2
#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include <numeric>
using namespace std;
void sum(vector<long> v){
long res=0;
for (int i = 0; i < v.size(); ++i) {
res+=v[i];
}
// 或者用accumulate 函数求和
// res= accumulate(v.begin(),v.end(),long(0));
cout<<res<<endl;
}
int main(){
string item;
vector<long> vec;
while (cin>>item){
vec.push_back(stol(item));
if (cin.get()=='\n'){
sum(vec);
}
}
}