ACM输入输出

写在前面

  • 主要记录一下ACM输入输出的写法;

一、输入数值

1. 给定N的定长多行输入

题目描述

  • 代码
#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    
    
    int n;
    cin >> n;
    int a, b; 
    while(n > 0) {
    
    
        cin >> a >> b;
        printf("%d\n", a+b);
        --n;
    }
    
    return 0;
}

2. 给定结束值的定长多行输入

题目描述

  • 代码
#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    
    
    int a, b; 
    while(cin >> a >> b) {
    
    
        if(a == 0 && b == 0) {
    
    
            break;
        }
        printf("%d\n", a+b);
    }
    
    return 0;
}

3. 无给定N的定长多行输入

题目描述

  • 代码
#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    
    
    int a, b; 
    while(cin >> a >> b) {
    
    
        printf("%d\n", a+b);
    }
    
    return 0;
}

4. 行首给定个数且给定N的不定长多行输入

题目描述

  • 代码
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int main() {
    
    
    int t;
    cin >> t;
    while(t > 0) {
    
    
        int n;
        cin >> n;        
        vector<int> arr(n);
        
        int sum = 0;
        for(int i=0;i<n;++i) {
    
    
            cin >> arr[i];
            sum += arr[i];
        }
        printf("%d\n", sum);
        --t;
    }
    
    return 0;
}

5. 行首给定个数且给定结束值的不定长多行输入

题目描述

  • 代码
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int main() {
    
    
    int n; 
    while(cin >> n) {
    
    
        if(n == 0) {
    
    
            break;
        }        
        vector<int> arr(n);
        
        int sum = 0;
        for(int i=0;i<n;++i) {
    
    
            cin >> arr[i];
            sum += arr[i];
        }
        printf("%d\n", sum);
    }
    
    return 0;
}

6. 行首给定个数但无给定N的不定长多行输入

题目描述

  • 代码
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int main() {
    
    
    int n;
    while(cin >> n) {
    
          
        vector<int> arr(n);
        
        int sum = 0;
        for(int i=0;i<n;++i) {
    
    
            cin >> arr[i];
            sum += arr[i];
        }
        printf("%d\n", sum);
    }
    
    return 0;
}

7. 行首无给定个数且无给定N的不定长多行输入

题目描述

  • 思路

    • cin.get() == '\n'判断当前是否已经到行尾;
    • cin >> var在读到文件尾会返回false,其余返回true
      • 虽然cin >>重载是返回istream对象,但istream类重载了bool操作符,可以将istream对象隐式转换成bool类型;
      • 所以可以返回false或者true作为条件判断;
  • 代码

#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int main() {
    
        
    vector<int> arr;
    int sum = 0;
    int a;
    while(cin >> a) {
    
      
        arr.emplace_back(a);
        sum += a;     
        
        if(cin.get() == '\n') {
    
    
            printf("%d\n", sum);
            sum = 0;
            arr.clear();
        }        
    }
    
    return 0;
}

二、输入字符串

1. 给定N的多个字符串输入

题目描述

  • 代码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    
    
    int n;
    cin>>n;
    
    vector<string> arr(n);
    for(int i=0;i<n;++i)
    {
    
    
        cin >> arr[i];
    }
    
    sort(arr.begin(), arr.end());
    for(int i=0;i<n-1;++i)
    {
    
    
        cout<<arr[i]<<' ';
    }
    cout << arr[n-1] << endl;
    return 0;
}

2. 行首无给定个数且无给定N的不定长多行输入

题目描述

扫描二维码关注公众号,回复: 15442411 查看本文章
  • 代码
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    
    
    vector<string> arr;
    string s;
    while(cin >> s)
    {
    
    
        arr.emplace_back(s);
        if(cin.get() == '\n')
        {
    
    
            sort(arr.begin(),arr.end());
            for(int i=0;i<arr.size()-1;++i)
            {
    
    
                cout << arr[i] << ' ';
            }
            cout << arr[arr.size()-1] << endl;
            arr.clear();
        }
    }
    return 0;
}

3. 行首无给定个数且非空格分隔的多行输入

题目描述

  • 思路

  • 整行读到一个长字符串后,再按分隔符用遍历字符串的方式分割字符串;

  • 代码

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;

int main()
{
    
    
    string s;
    vector<string> arr;
    while(cin >> s)
    {
    
    
        int left = 0, right = 0;
        while(right < s.length())
        {
    
    
            if(s[right] == ',')
            {
    
    
                arr.emplace_back(s.substr(left, right-left));
                left = right + 1;
            }
            right++;
        }
        arr.emplace_back(s.substr(left, right-left));
        
        sort(arr.begin(), arr.end());        
        for(int i=0;i<arr.size()-1;++i)
        {
    
    
            cout << arr[i] << ',';
        }
        cout << arr[arr.size()-1] << endl;
        arr.clear();
    }
    return 0;
}

三、输入非十进制数值

1. 输入二进制数值

  • 题目
  • 输入为0/1串;

题目描述

  • 思路

  • 可以直接使用std::bitset进行处理;

    • 本质上是一个数组,每一个元素仅占一个bit空间;
    • 但大小必须在编译时就指定;
    • 构造函数:
      • 可以由std::string0/1串构造;
      • 可以由整数构造;
  • 参考:

  • 代码

#include <iostream>
#include <stdio.h>
#include <bitset>
using namespace std;

int main()
{
    
    
    bitset<10> bits;
    // bitset<10> bits(50);
    // bitset<10> bits("110010");
    
    cin >> bits;
    unsigned long a = bits.to_ulong();
    unsigned long long b = bits.to_ullong();
    string s = bits.to_string();
    
    cout << bits << endl;
    printf("%lu\n", a);
    printf("%llu\n", b);
    printf("%s\n", s.c_str());
    
    return 0;
}

2. 输入八进制数值

  • 题目

题目描述

  • 思路

  • 八进制数值以0开头,格式为0...

  • std::oct输入输出;

    • 需要用std::dec改回十进制输入输出;
  • 代码

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    
    
    int a;
    
    cin >> oct >> a;
    
    printf("%d\n", a);
    printf("%o\n", a);
    
    return 0;
}

3. 输入十六进制数值

  • 题目

题目描述

  • 思路

  • 八进制数值以0x开头,格式为0x...

  • std::hex输入输出;

    • 需要用std::dec改回十进制输入输出;
  • 代码

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    
    
    int a;
    cin >> hex >> a;
    
    printf("%d\n", a);
    printf("%x\n", a);  
      
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43992162/article/details/130546964