ACM模式常见输入输出练习(C++代码)
大厂笔试 ACM模式常见输入输出练习
一、大厂篇
1.1 单行数字,用空格/逗号分割
输入描述
输入数据有1行数字,空格分开,表示一组输入数据。
或
输入数据有1行数字,逗号','分开,表示一组输入数据。
4 1 2 3 4
或
4,1,2,3,4
代码
#include <iostream>
using namespace std;
int main(){
    vector<int> data;
    int tmp;
    while (cin >> tmp) {
	//data.push_back(tmp);// 处理数据
	if (cin.get() == '\n') break;
    }
  
    return 0;
}
1.2 单行字符串,用空格/逗号分割
输入描述
输入数据有1行字符串,空格分开,表示一组输入数据。
或
输入数据有1行字符串,逗号','分开,表示一组输入数据。
string char xiao meng
或
string,char,xiao,meng
代码
#include <iostream>
using namespace std;
int main(){
    string str;
    vector<string> v;
    getline(cin, str);
    stringstream ss(str);
    while (getline(ss, str, ' ')) {//用空格为分隔符
    //while (getline(ss, str, ',')) {//用','为分隔符
	v.push_back(str);
    }
    return 0;
}
2.1 多行数字/字符串,用空格分割
输入描述
输入数据有多组, 每行表示一组输入数据。
每行不定有n个整数,空格隔开。(1 <= n <= 100)。
或
输入数据有多组, 每行表示一组输入数据。
每行不定有n个字符串,空格隔开。(1 <= n <= 100)。
1 2 3
4 5
或
a c bb
f dddd
代码
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
int main(){
    vector<string> v;
    string s;
    while(cin >> s){
        v.push_back(s);
        if(getchar() == '\n'){
            // 处理数据
            v.clear();
        }
    }
    return 0;
}
2.2 多行数字/字符串,用逗号分割
输入描述
输入数据有多组, 每行表示一组输入数据。
每行不定有n个整数,','隔开。(1 <= n <= 100)。
或
输入数据有多组, 每行表示一组输入数据。
每行不定有n个字符串,','隔开。(1 <= n <= 100)。
1,2,3
4,5
或
a,c,bb
f,dddd
nowcoder
代码1
#include <iostream>
using namespace std;
#include <sstream>
#include <vector>
#include <algorithm>
int main(){
    vector<int> v;
    string str;
    while(getline(cin,str)){
        stringstream ss(str);//定义流对象 复制str到ss
        while(getline(ss, str, ',')){//分隔符, 从流ss中取字符到str
            v.push_back(stoi(str));
        }
        // 处理数据
        v.clear();
    }
    return 0;
}
代码2 (前提已知有 n 行数据)
        vector<int> data;
	int tmp;
        while(n--){
            while (cin >> tmp) {
		data.push_back(tmp);
		if (cin.get() == '\n') break;
	    }
        }
3、二维数组,逗号隔开,同时接收换行符
【范例】输入
则
输入描述
二维数组,用空格或','隔开。
12 23 34
23 45 56
34 45 76
或
12,23,34
23,45,56
34,45,76
代码1
#include <iostream>
using namespace std;
#include <sstream>
#include <vector>
#include <algorithm>
int main(){
    int num;
    vector<vector<int>> v;
    vector<int> tmp;
    int n =3;//二维数组行数
    while (cin>>num){
        tmp.push_back(num);
        if (cin.get() == '\n'){
            v.push_back(tmp);
            n++;
            tmp.clear();
        }
        if(n == 3){
            break;
        }
    }
    
    //二维数组遍历
    for (int i = 0; i < v.size(); i++){
        for(int j = 0; j < v[i].size(); j++){
          cout << *it <<" "<<endl;
        }
        cout << endl;
    }
    return 0;
}
牛客篇
1、
输入描述
输入有两行,第一行n
第二行是n个字符串,字符串之间用空格隔开
5
c d a bb e
代码
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
int main(){
    int n;
    cin >> n;
    vector<string> v;
    string s;
    while(n--){
        cin >> s;
        v.push_back(s);
    }
    // 处理数据
    return 0;
}
2、
输入描述
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
4 1 2 3 4
5 1 2 3 4 5
代码
#include <iostream>
using namespace std;
int main(){
    int n;
    while(cin >> n){
        int nums[n];
        // 处理数据
    }
    return 0;
}
输入描述
输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
2
4 1 2 3 4
5 1 2 3 4 5
代码
#include <iostream>
using namespace std;
int main(){
    int n,k;
    cin >> k;
    while(k--){
        while(cin>>n){
            int nums[n];
            // 处理数据
        }
    }
    return 0;
}
输入描述
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
4 1 2 3 4
5 1 2 3 4 5
0
代码
#include <iostream>
using namespace std;
int main(){
    int n;
    while(cin>>n){
        if(n == 0){
            return 0;
        }
        int nums[n];
        // 处理数据
    }
    return 0;
}
3、输入包括两个正整数a,b(1 <= a, b <= 1000),输入数据包括多组。
1 5
10 20
代码
#include <iostream>
using namespace std;
int main(){
    int a,b;
    while(cin>>a>>b){
        // 处理数据
    }
    return 0;
}
输入描述
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 1000)
2
1 5
10 20
代码
#include <iostream>
using namespace std;
int main(){
    int a,b;
    int n;
    while(n--){
        cin>>a>>b;
        // 处理数据
    }
    return 0;
}
输入描述
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
1 5
10 20
0 0
代码
#include <iostream>
using namespace std;
int main(){
    int a,b;
    while(cin>>a>>b){
        if(a == 0 && b == 0){
            return 0;
        }
        // 处理数据
    }
    return 0;
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号