笔试输入那些事儿

最近一直在看一些笔试编程的题目,作为一个编程菜鸟,很多时候都卡在了输入输出阶段,收集整理一下,以备不时之需。 采取的编程语言是C++(很喜欢STL模板,比较省事,自己对与一些定义还不熟练吧)。

数据读取

首先呢,就是怎么读数据,我们列举一下可能的输入形式(比较难的部分啦,简单的大家都懂):

多组字符串

这里写图片描述
可以看到,同一般的输入不同,这里没有给出有多少组测试用例,但是每个用例都是一行,so~
输入:

string s;
while(cin>>s){
//具体处理过程;
}

算是一个比较简略的处理方法,因为此时每行都没有空格等特殊字符,并且一行为一个测试用例

多组数据,多行输入

输入描述:

第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k <=100),接下来一行有2n个数 a1,a2,...,a2n (1 ≤ ai ≤ 1000000000)。

输出描述:

对于每组数据,输出一行,最终的序列。数字之间用空格隔开,不要在行末输出多余的空格。

输入例子:

3
3 1
1 2 3 4 5 6
3 2
1 2 3 4 5 6
2 2
1 1 1 1

输出例子:

1 4 2 5 3 6
1 5 4 3 2 6
1 1 1 1

此时,我们对应的输入可以是:

int T;//T组数据
int n,k;
cin>>T;
for(int i=0;i<T;i++){
    cin>>n>>k;
    vector<int> a(2*n);//初始化个数
    for(int j=0;j<2*n;j++){
        cin>>a[j];
    }
    //下一步操作
}

这里我们用到了vector这个对象,可以当成是一个可变长度的数组,如果数组的大小不知道,利用vector还蛮方便。
这里写图片描述

二维数组输入

有时候题目会给你一个二维的数组,m*n ,这个时候输入方法就乱了,我还是推荐使用vector
比如:
输入第一行为二维数组的实际大小,之后每一行为二维数组的实际内容:

4
*000
00*0
00**
0*00

此时的输入为:

int m;
cin>>m;
vector<vector<char>> a(m,vector<char>(m));
for(int i=0;i<m;i++){
    for(int j=0;j<m;j++){
        cin>>a[i][j];
    }
}

整数数组的输入

很多时候,输入的数组不仅时字符串,还有整数,例如:
输入描述:

一行整数序列,数字用空格分隔,如:1 4 -1 3 5 6 2

我一般采取的方法是:

int tmp;
vector<int> v;
while(cin>>tmp){
    v.push_back(tmp);
}

当然还有更加复杂的情况,例如:

输入第一行为整数序列,数组用空格分隔,如:45 67 33 21
输入第二行为一个整数k,k在数组长度范围内,如:2

一个可行的方式是:

char c;
int k,tmp;
vector<int> v;
while((c=getchar())!='\n'){
    if(c!=' ')//可替换为其他分隔方式
    {
        ungetc(c,stdin);
        cin>>tmp;
        v.push_back(tmp);
    }
}
cin>>k;

暂时就这些啦,之后再补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值