C++刷题测试样例输入输出

5 篇文章 1 订阅
3 篇文章 0 订阅

基础用法

1、cin & cout
cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。

头文件

#include<iostream> 
using namespace std; 

cin和cout的基本操作
cout语句的一般格式为:
cout<<表达式1<<表达式2<<表达式3…<<表达式n;
cin语句的一般格式为:
cin>>变量1>>变量2>>变量3>>…>>变量n;

cin 可接收数字,字符,字符串, 接收字符串时,遇到空格,tab键和换行符都会结束接收。

2、getline
cin.getline()
可以接收空格,cin.getline(char*,int,char),内有三个参数,第一个表示要接收的字符串,第二个表示接收字符个数,第三个表示结束字符。当第三个省略时默认结束字符为’\0’。(结束符也算在字符个数里面,但是输出并不显示)
getline()
接收一个字符串,可以接收空格并输出,需包含“#include”

str="\n"; 
getline(cin,str);

stringstream
sstream库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。

两数之和+字符串排序(简洁版)

#include<bits/stdc++.h>
using namespace std;
/*
//两数之和
//输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
//接下来t行, 每行一组数据。
//每行的第一个整数为整数的个数n(1 <= n <= 100)。
//接下来n个正整数, 即需要求和的每个正整数。
// input:
// 2
// 4 1 2 3 4
// 5 1 2 3 4 5
// output:
// 10
// 15
int main(){
    int t,n;
    cin >> t;
    for(int i = 0; i < t; i++){
        while(cin >> n){
            int sum = 0;
            while(n--){
                int temp;
                cin >> temp;
                sum += temp;
            }
            cout << sum << endl;
        }
    }
}
 */

//字符串排序
//多个测试用例,每个测试用例一行。
//每行通过(空格),隔开,有n个字符,n<100
//input:
//a,c,bb
//f,dddd
//nowcoder
//output:
//a,bb,c
//dddd,f
//nowcoder
int main()
{//字符之间空格隔开
    string s;
    while(getline(cin,s))
    {
        vector<string> vecstr;
        stringstream line(s);
        while(line>>s)
        {
            vecstr.push_back(s);
        }
        sort(vecstr.begin(), vecstr.end());
        for(int i=0; i< vecstr.size();i++)
        {
            cout<<vecstr[i]<<" ";
        }
        cout<<endl;
    }
}
/*
int main(){//字符之间,隔开
    string s;

    while(cin >> s){
        vector<string> strs;
        int len = 0;
        for(int i = 0; i <= s.length(); ++i){
            ++len;
            if(s[i] == ',' || s[i] == '\0'){
                strs.push_back(s.substr(i - len + 1, len - 1));
                len = 0;
            }

        }
        sort(strs.begin(), strs.end());
        for(int i = 0; i < strs.size() - 1; ++i)
            cout << strs[i] << ',';
        cout << strs[strs.size() - 1] << endl;
    }
}
 */
/*
int main(){//字符之间,隔开
    string s;
    vector<string> temp;
    while(getline(cin,s)){
        stringstream ss;
        ss<<s;
        string a;
        while(getline(ss,a,',')){
            temp.push_back(a);
        }
        sort(temp.begin(),temp.end());
        for(int i=0;i<temp.size()-1;i++){
            cout<<temp[i]<<',';
        }
        cout<<temp.back()<<endl;
        temp.clear();
    }
}
*/
///*************可不看***************************//
/*
int main()
{//字符之间,隔开
    string str;
    while(getline(cin,str))
    {
        string strtemp;
        stringstream ss(str);
        multiset<string> strset;//multisets允许元素重复,而set不允许重复。
        //set<string> strset; 没有AC的原因是有重复的串,但是牛客只说失败了,没有提示哪个用例失败了
        while(getline(ss,strtemp,','))
            strset.insert(strtemp);
        string sul;
        for(string str:strset)
        {
            sul+=str;
            sul += ",";
        }
            //cout<<str<<",";
        if(sul.size()>1)
            cout<<sul.substr(0,sul.size()-1)<<endl;
    }
}
 */
 */

两数之和

*1. 多行输入
输入描述:
输入包括两个正整数a,b(1 <= a, b <= 109),输入数据包括多组。

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

输入例子1:
1 5
10 20
输出例子1:
6
30

#include<bits/stdc++.h>
using namespace std;
/*
int main()
{
    vector<int> buf;
    
    string input1;
    getline(cin, input1);
    while(input1.size()>0)
    {
        int space = input1.find(' ');
        string comp1 = input1.substr(0,space);
        string comp2 = input1.substr(space+1,input1.length()-space);
        buf.push_back(atoi(comp1.c_str())+
                          atoi(comp2.c_str()));
        getline(cin,input1);
    }
    
    for(auto it = buf.begin(); it!=buf.end();it++)
        cout << *it<<endl;
    return 0;
}
*/
#include<iostream>
int main() {
    int a, b;
    while(cin >> a >> b) {
        cout << a+b <<endl;
    }
    return 0;
}

2. 给定数据行数,多行输入

输入描述:
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 109)

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

输入例子1:
2
1 5
10 20
输出例子1:
6
30

#include<bits/stdc++.h>
#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;
        }
}

3. 多行输入,给定终止条件

输入描述:
输入包括两个正整数a,b(1 <= a, b <= 109),输入数据有多组, 如果输入为0 0则结束输入

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

输入例子1:
1 5
10 20
0 0
输出例子1:
6
30

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main(){
    int a, b;
    while(cin >> a >> b){
        if(a == 0 && b == 0)
            break;
        cout << a + b << endl;
    }
}

4. 指定每一行数字个数, 多行输入

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

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

输入例子1:
4 1 2 3 4
5 1 2 3 4 5
0
输出例子1:
10
15

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main(){
    int n;
    while(cin >> n){
        if(n == 0)
            break;
        int sum = 0;
        while(n--){
            int temp;
            cin >> temp;
            sum += temp;
        }
        cout << sum << endl;
    }
}

5. 指定行数和每行数字数量, 多行输入

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

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

输入例子1:
2
4 1 2 3 4
5 1 2 3 4 5
输出例子1:
10
15

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main(){
    int t,n;
    cin >> t;
    for(int i = 0; i < t; i++){
        while(cin >> n){
        int sum = 0;
        while(n--){
            int temp;
            cin >> temp;
            sum += temp;
        }
        cout << sum << endl;
    }
    }
}

6. 指定每行数字个数, 多行输入

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

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

输入例子1:
4 1 2 3 4
5 1 2 3 4 5
输出例子1:
10
15

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main(){
    int n;
    while(cin >> n){
        int sum = 0;
        while(n--){
            int temp;
            cin >> temp;
            sum += temp;
        }
        cout << sum << endl;
    }
}

7. 多行输入,每行数字个数不定

输入描述:
输入数据有多组, 每行表示一组输入数据。

每行不定有n个整数,空格隔开。(1 <= n <= 100)。

输出描述:
每组数据输出求和的结果
输入例子1:
1 2 3
4 5
0 0 0 0 0
输出例子1:
6
9
0

#include<bits/stdc++.h>
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
    string str;
    while(getline(cin,str))
    {
        stringstream s(str);//istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。
        //stringstream stream("string");;stream<<t;//向流中传值out_type result;//这里存储转换结果stream>>result;//向result中写入值
        int sum = 0,num=0;
        while(s>>num)
        {
            sum+=num;
        }
        cout<<sum<<endl;
    }
}

字符串排序

1. 一行字符, 字符间空格隔开

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

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

输入例子1:
5
c d a bb e

#include<bits/stdc++.h>
#include<iostream>
#include<string>
#include<set>
using namespace std;
/*
int main()
{
    int n = 0;
    while(cin>>n){
        //cin.get();
        set<string> strset;
        while(n--){
            string strtemp;
            cin>>strtemp;
            //getline(cin, strtemp,' ');
            strset.insert(strtemp);//set里面会自动排序(从小到大),以后可以利用好这个特性,set里面用的是平衡二叉搜索树(也就是红黑树)维护
        }
        for(auto str:strset)
            cout<<str<<" ";
        cout<<endl;
    }
}

*/
int main()
{
    int n;
    string str;
    vector<string> mystr;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>str;
        mystr.push_back(str);
        sort(mystr.begin(),mystr.end());
    }
    for (int i=0;i<mystr.size();i++){
        cout<<mystr[i];
        if(i!=mystr.size()-1) cout<<' ';
    }
     
}

2. 多行字符串, 字符之间空格隔开

输入描述:
多个测试用例,每个测试用例一行。

每行通过空格隔开,有n个字符,n<100

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

输入例子1:
a c bb
f dddd
nowcoder
输出例子1:
a bb c
dddd f
nowcoder

#include<bits/stdc++.h>
using namespace std;
int main() 
{ 
    string s; 
    while(getline(cin,s)) 
    { 
        vector<string> vecstr; 
        stringstream line(s); 
        while(line>>s) 
        { 
            vecstr.push_back(s); 
        } 
        sort(vecstr.begin(), vecstr.end()); 
        for(int i=0; i< vecstr.size();i++) 
        { 
            cout<<vecstr[i]<<" "; 
        } 
        cout<<endl; 
    } 
}

3. 多行字符串, 字符之间逗号隔开

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

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

输入例子1:
a,c,bb
f,dddd
nowcoder
输出例子1:
a,bb,c
dddd,f
nowcoder

#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<sstream>
using namespace std;

int main(){
    string s;
    
    while(cin >> s){
        vector<string> strs;
        int len = 0;
        for(int i = 0; i <= s.length(); ++i){
            ++len;
            if(s[i] == ',' || s[i] == '\0'){
                strs.push_back(s.substr(i - len + 1, len - 1));
                len = 0;
            }
            
        }
        sort(strs.begin(), strs.end());
        for(int i = 0; i < strs.size() - 1; ++i)
            cout << strs[i] << ',';
        cout << strs[strs.size() - 1] << endl;
    }
}
/*
int main(){
    string s;
    vector<string> temp;
    while(getline(cin,s)){
        stringstream ss;
        ss<<s;
        string a;
        while(getline(ss,a,',')){
            temp.push_back(a);
        }
        sort(temp.begin(),temp.end());
        for(int i=0;i<temp.size()-1;i++){
            cout<<temp[i]<<',';
        }
        cout<<temp.back()<<endl;
        temp.clear();
    }
}
*/
/*
int main()
{
    string str;
    while(getline(cin,str))
    {
        string strtemp;
        stringstream ss(str);
        multiset<string> strset;//multisets允许元素重复,而set不允许重复。
        //set<string> strset; 没有AC的原因是有重复的串,但是牛客只说失败了,没有提示哪个用例失败了
        while(getline(ss,strtemp,','))
            strset.insert(strtemp);
        string sul;
        for(string str:strset)
        {
            sul+=str;
            sul += ",";
        }
            //cout<<str<<",";
        if(sul.size()>1)
            cout<<sul.substr(0,sul.size()-1)<<endl;
    }
    }
    */

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值