• 牛客网输入输出练习c++ 个人版题解


    原题链接

    https://ac.nowcoder.com/acm/contest/5657#question

    https://www.nowcoder.com/test/27976983/summary

    1.计算 a + b a+b a+b,任意组数据任意结尾

    链接:https://ac.nowcoder.com/acm/contest/5657/A
    来源:牛客网

    数据范围: 数据组数 1 ≤ t ≤ 100 1\le t\le 100 1t100 , 数据大小满足 1 ≤ n ≤ 1000 1 \le n\le 1000 1n1000
    输入包括两个正整数 a , b ( 1 ≤ a , b ≤ 1000 ) a,b(1\le a, b \le 1000) a,b(1a,b1000),输入数据包括多组。

    输出描述:
    输出 a + b a+b a+b的结果

    输入样例:

    1 5
    10 20
    
    • 1
    • 2

    输出样例:

    6
    30
    
    • 1
    • 2

    代码:

    #include
    using namespace std;
    int a,b;
    int main(){
        while(cin>>a>>b){
            cout<<a+b<<endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    说明:while(cin>>a>>b)可以反复输入,直到没有读取到输入结束

    2.计算 a + b a+b a+b,指定组数据

    链接:https://ac.nowcoder.com/acm/contest/5657/B
    来源:牛客网

    数据范围:数据组数满足 1 ≤ t ≤ 100 1 \le t \le 100 1t100 ,数据大小满足 1 ≤ a , b ≤ 1000 1 \le a,b \le 1000 1a,b1000

    输入描述:
    输入第一行包括一个数据组数 t ( 1 ≤ t ≤ 100 ) t(1 \le t \le100) t(1t100)
    接下来每行包括两个正整数 a , b ( 1 ≤ a , b ≤ 1000 ) a,b(1 \le a, b \le 1000) a,b(1a,b1000)

    输出描述:
    输出 a + b a+b a+b的结果

    输入样例:

    2
    1 5
    10 20
    
    • 1
    • 2
    • 3

    输出样例:

    6
    30
    
    • 1
    • 2

    代码:

    #include
    using namespace std;
    int t;
    int main(){
        cin>>t;
        while(t--){
            int a,b;
            cin>>a>>b;
            cout<<a+b<<endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.计算 a + b a+b a+b,任意组数据以0 0结尾

    链接:https://ac.nowcoder.com/acm/contest/5657/C
    来源:牛客网

    数据范围:数据组数满足 1 ≤ t ≤ 100 1 \le t \le 100 1t100, 数据大小满足 1 ≤ n ≤ 100 1 \le n \le 100 1n100

    输入描述:
    输入包括两个正整数 a , b ( 1 ≤ a , b ≤ 1 0 9 ) a,b(1 \le a, b \le 10^9) a,b(1a,b109),输入数据有多组, 如果输入为 00 0 0 00则结束输入

    输出描述:
    输出a+b的结果

    输入样例:

    1 5
    10 20
    0 0
    
    • 1
    • 2
    • 3

    输出样例:

    6
    30
    
    • 1
    • 2

    代码:

    #include
    using namespace std;
    int a,b;
    int main(){
        while(cin>>a>>b&&a&&b){
            cout<<a+b<<endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    说明:while(cin>>a>>b&&a&&b)在读取完 a b ab ab数值后检测 a b ab ab是否为0,同时为0则跳出循环

    4.计算行数据和,每行数据总数已知,总行数未知但以0结尾

    链接:https://ac.nowcoder.com/acm/contest/5657/D
    来源:牛客网

    题目描述 :
    计算一系列数的和

    数据范围:数据组数满足 1 ≤ t ≤ 100 1 \le t \le 100 1t100,每组数据中整数个数满足 1 ≤ n ≤ 100 1 \le n \le 100 1n100,每组数据中的值满足 1 ≤ v a l ≤ 100 1 \le val \le 100 1val100

    输入描述:
    输入数据包括多组。
    每组数据一行,每行的第一个整数为整数的个数 n ( 1 ≤ n ≤ 100 ) n(1 \le n \le 100) n(1n100), n n n 0 0 0的时候结束输入。
    接下来 n n n个正整数,即需要求和的每个正整数。

    输出描述:
    每组数据输出求和的结果

    输入样例:

    4 1 2 3 4
    5 1 2 3 4 5
    0
    
    • 1
    • 2
    • 3

    输出样例:

    10
    15
    
    • 1
    • 2

    代码:

    #include
    #include
    #include
    #include
    using namespace std;
    int t;
    int main(){
        while(cin>>t&&t){
            int sum=0;
            int num=0;
            for(int i=0;i<t;i++){
                cin>>num;
                sum+=num;
            }
            cout<<sum<<endl;
        }
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    说明:while(cin>>t&&t)判断当前读取数据是否为0,为0则跳出循环

    5.计算行数据和,每行数据总数已知,总行数已知

    链接:https://ac.nowcoder.com/acm/contest/5657/E
    来源:牛客网

    题目描述:
    计算一系列数的和

    数据范围:数据组数满足 1 ≤ t ≤ 100 1 \le t \le 100 1t100,每组数据中的整数个数满足 1 ≤ n ≤ 100 1 \le n \le 100 1n100 ,每个数据大小满足 1 ≤ v a l ≤ 100 1 \le val \le 100 1val100

    输入描述:
    输入的第一行包括一个正整数 t ( 1 ≤ t ≤ 100 ) t(1 \le t \le 100) t(1t100), 表示数据组数。
    接下来 t t t行, 每行一组数据。
    每行的第一个整数为整数的个数 n ( 1 ≤ n ≤ 100 ) n(1 \le n \le 100) n(1n100)
    接下来 n n n个正整数, 即需要求和的每个正整数。

    输出描述:
    每组数据输出求和的结果

    输入样例:

    2
    4 1 2 3 4
    5 1 2 3 4 5
    
    • 1
    • 2
    • 3

    输出样例:

    10
    15
    
    • 1
    • 2

    代码:

    #include
    using namespace std;
    int main(){
        int t;
        cin>>t;
        while(t--){
            int n,num=0,sum=0;
            cin>>n;
            for(int i=0;i<n;i++){
                cin>>num;
                sum+=num;
            }
            cout<<sum<<endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    6.计算行数据和,每行数据总数已知,总行数未知且任意结尾

    链接:https://ac.nowcoder.com/acm/contest/5657/F
    来源:牛客网

    题目描述:
    计算一系列数的和

    数据范围: 1 ≤ n ≤ 1000 1 \le n \le 1000 1n1000 , 所有数都满足 1 ≤ v a l ≤ 1000 1 \le val \le 1000 1val1000

    输入描述:
    输入数据有多组, 每行表示一组输入数据。
    每行的第一个整数为整数的个数 n ( 1 ≤ n ≤ 100 ) n(1 \le n \le 100) n(1n100)
    接下来 n n n个正整数, 即需要求和的每个正整数。

    输出描述:
    每组数据输出求和的结果

    输入样例:

    4 1 2 3 4
    5 1 2 3 4 5
    
    • 1
    • 2

    输出样例:

    10
    15
    
    • 1
    • 2

    代码:

    #include
    #include
    #include
    #include
    using namespace std;
    int t;
    int main(){
        while(cin>>t){
            int sum=0;
            int num=0;
            for(int i=0;i<t;i++){
                cin>>num;
                sum+=num;
            }
            cout<<sum<<endl;
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    说明:同样的,用while(cin>>t)读取数据

    7.计算行数据和,每行数据总数未知,总行数未知且任意结尾

    链接:https://ac.nowcoder.com/acm/contest/5657/G
    来源:牛客网

    题目描述:
    计算一系列数的和

    输入描述:
    输入数据有多组, 每行表示一组输入数据。
    每行不定有 n n n个整数,空格隔开。 ( 1 ≤ n ≤ 100 ) (1 \le n \le 100) (1n100)

    输出描述:
    每组数据输出求和的结果

    输入样例:

    1 2 3
    4 5
    0 0 0 0 0
    
    • 1
    • 2
    • 3

    输出样例:

    6
    9
    0
    
    • 1
    • 2
    • 3

    代码:

    #include
    #include
    #include
    #include
    using namespace std;
    string s;
    int main(){
        while(getline(cin,s)){
            stringstream sstream(s);
            int sum=0,num=0;
            while(sstream>>num)
                sum+=num;
            cout<<sum<<endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    说明:stringstream类可以把字符串转化为输入流,然后从输入流中读取数据。getline(cin,s)可以一次性读取自带空格的一行数据。sstream>>numcin>>num类似,但是是从刚才转化出的字符串流而不是键盘/文件中读取数据。

    8.字符串排序,已知字符串数量

    链接:https://ac.nowcoder.com/acm/contest/5657/H
    来源:牛客网

    题目描述:
    对输入的字符串进行排序后输出

    输入描述:
    输入有两行,第一行 n n n
    第二行是 n n n个字符串,字符串之间用空格隔开

    输出描述:
    输出一行排序后的字符串,空格隔开,无结尾空格

    输入样例:

    5
    c d a bb e
    
    • 1
    • 2

    输出样例:

    a bb c d e
    
    • 1

    代码:

    #include
    #include
    #include
    using namespace std;
    vector<string> vs;
    int main(){
        string s;
        int n;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>s;
            vs.push_back(s);
        }
        sort(vs.begin(),vs.end());
        for(int i=0;i<n-1;i++)
            cout<<vs[i]<<" ";
        cout<<vs[n-1];
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    说明:用vector暂存输入的字符串

    9.字符串排序,未知字符串数量,多组数据

    链接:https://ac.nowcoder.com/acm/contest/5657/I
    来源:牛客网

    题目描述
    对输入的字符串进行排序后输出

    输入描述:
    多个测试用例,每个测试用例一行。
    每行通过空格隔开,有 n n n个字符, n < 100 n<100 n100

    输出描述:
    对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开

    输入样例:

    a c bb
    f dddd
    nowcoder
    
    • 1
    • 2
    • 3

    输出样例:

    a bb c
    dddd f
    nowcoder
    
    • 1
    • 2
    • 3

    代码:

    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;
    string s;
    vector<string> vs;
    int main(){
        while(getline(cin,s)){
            stringstream sstream(s);
            vs.clear();
            string temps;
            while(sstream>>temps)
                vs.push_back(temps);
            sort(vs.begin(),vs.end());
            for(auto str:vs)
                cout<<str<<" ";
            cout<<endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    说明:同样的,用getline(cin,s)读取自带空格的数据,用stringstream创建字符串流。

    10.字符串排序,未知字符串数量,每个字符串以逗号分隔

    链接:https://ac.nowcoder.com/acm/contest/5657/J
    来源:牛客网

    题目描述:
    对输入的字符串进行排序后输出

    输入描述:
    多个测试用例,每个测试用例一行。
    每行通过,隔开,有 n n n个字符, n < 100 n<100 n100

    输出描述:
    对于每组用例输出一行排序后的字符串,用’,'隔开,无结尾空格

    输入样例:

    a,c,bb
    f,dddd
    nowcoder
    
    • 1
    • 2
    • 3

    输出样例:

    a,bb,c
    dddd,f
    nowcoder
    
    • 1
    • 2
    • 3

    代码(个人版)不是最优解

    #include
    #include
    #include
    #include
    #include
    using namespace std;
    vector<string> vs;
    int main(){
        string lines;
        while(getline(cin,lines)){
            vs.clear();
            while(lines.find(',')!=string::npos){
                vs.push_back(lines.substr(0,lines.find(',')));
                lines=lines.substr(lines.find(',')+1);
            }
            vs.push_back(lines);
            sort(vs.begin(),vs.end());
            int n=vs.size();
            cout<<vs[0];
            for(int i=1;i<n;i++)
                cout<<","<<vs[i];
            cout<<endl;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    说明:反复调用find()和substr不断找逗号,不断把字符串截短。输出时先输出第0项,之后输出逗号和当前项,防止出现行末空格和多余逗号。

    代码(牛客网上最优解
    https://ac.nowcoder.com/acm/contest/view-submission?submissionId=52627787

    #include 
    using namespace std;
    int main(){
        string s;
        while(getline(cin, s)){
            stringstream ss(s);
            vector<string> v;
            while(getline(ss, s, ',')) v.push_back(s);
            sort(v.begin(), v.end());
            for(int i=0;i<v.size()-1;++i) cout<<v[i]<<',';
            cout<<v.back()<<endl;
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    说明:getline(ss,s,ch)可以从字符串流ss中将字符串读入s,这个字符串默认以\n结尾,但可以通过参数指定为以ch结尾。

    11.计算 a + b a+b a+b,但有坑

    链接:https://ac.nowcoder.com/acm/contest/5657/K
    来源:牛客网

    数据范围: 0 < a , b < 2 × 1 0 10 0 < a,b < 2 \times 10^{10} 0<a,b<2×1010

    输入描述:
    输入有多组测试用例,每组空格隔开两个整数

    输出描述:
    对于每组数据输出一行两个整数的和

    输入样例

    1 1
    
    • 1

    输出样例

    2
    
    • 1

    代码:

    #include
    using namespace std;
    int main(){
        long long a,b;
        while(cin>>a>>b)
            cout<<a+b<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    说明:十年OI一场空,不开long long见祖宗。

  • 相关阅读:
    MySQL【基本select语句】
    深度相机识别物体——实现数据集准备与数据集分割
    web3 前端dapp从redux过滤出 (我创建与别人创建)正在执行的订单 并展示在Table上
    新用户如何选择WMS仓储管理系统解决方案
    Maven的下载与使用
    【ROS 2 基础-常用工具】-6 Rviz基础使用
    c语言学习——2——占位符、数据类型、查看占多少字节
    解决Oracle SQL语句性能问题——SQL语句改写(join、集合)
    EXCEL单元格中提取部分文本
    fmx windows 下 制作无边框窗口最小化最大化并鼠标可拖移窗口
  • 原文地址:https://blog.csdn.net/qq_46640863/article/details/126705009