牛客网编程常见输入输出练习

OJ在线编程常见输入输出练习场题目链接

python:各种字符输入、数值输入总结、OJ输入输出

  • 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();
        }
    }
}

自测本地通过

20210813110444

  • 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);
        }
    }
}

   转载规则


《牛客网编程常见输入输出练习》 M 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
54. 螺旋矩阵 54. 螺旋矩阵
54. 螺旋矩阵顺时针打印矩阵 设定上下左右四个点 从左到右彻底遍历一行,然后上边界+1。若上边界超过下边界:跳出 从上到下彻底遍历一列,然后右边界-1。若左边界超过右边界:跳出 从右到左彻底遍历一行,然后下边界-1。若上边界超过下边界:
2020-08-20
下一篇 
第四章:如何去除有序数组的重复元素 第四章:如何去除有序数组的重复元素
labuladong 如何去除有序数组的重复元素 用快慢指针解决问题(两种初始化都可以) slow,fast=0,0 slow,fast=head,head 或者 slow,fast=0,1 slow,fast=head,head.next
2020-08-18
  目录