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的不定长多行输入

题目描述

  • 代码
#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;
}
03-18
### ACM简介及其竞赛相关内容 #### 关于ACM计算机协会 美国计算机协会(Association for Computing Machinery, ACM)是一个国际性的学术组织,致力于推动计算技术的研究、教育和发展。作为世界上最大的计算机领域专业性学会之一,它不仅提供高质量的技术资源和服务,还通过举办各种活动促进成员之间的交流与合作。 #### ACM国际大学生程序设计竞赛概述 ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,简称ACM ICPC或ICPC),是由ACM主办的一项年度竞赛[^1]。这项赛事旨在展示大学生的创新能力、团队协作能力和在高压环境下解决复杂问题的能力。自1970年起源于德克萨斯A&M大学以来,经过数十年的发展,已成为全球最具影响力的大学生计算机编程竞赛之一[^2]。 当前,该竞赛得到了多家科技巨头的支持,例如IBM曾长期担任主要赞助商角色;而近年来,则由AWS、华为以及JetBrains等公司共同支持其运营与发展,并设立了专门机构如ICPC北京总部来负责协调管理东亚地区相关事务工作[^5]。 #### 参加意义及影响力 对于参与者而言,能够加入这样高水平的比赛不仅是对其个人技术和逻辑思维能力的一次极大挑战,同时也是对未来职业道路有着积极影响的经历。许多著名高等学府都会派遣代表队伍参加此项盛事,在竞争过程中所展现出的实力水平往往会被视为衡量一所学校整体教学质量高低的重要指标之一[^3]。 此外,随着全球化进程加快和技术需求日益增长的趋势下,越来越多的企业也开始关注这些优秀人才的表现情况并将其纳入招聘考量范围之内。因此无论是继续深造还是直接步入职场,“拥有ACM奖项”的履历无疑会增加求职者自身的竞争力权重[^4]。 ```python # 示例代码:简单的算法实现 def example_algorithm(input_list): result = [] for item in input_list: processed_item = process(item) # 假设有一个处理函数process() if condition(processed_item): # 判断条件是否满足 result.append(processed_item) return result ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值