错误票据(第四届蓝桥杯省赛C++A/B组,第四届蓝桥杯省赛JAVAA/B组)

文章讨论了在C++中处理数据输入,特别是从字符串读取数字的方法,包括直接转换和使用stringstream。接着,它提出了两种查找策略:映射查找和排序查找,来解决数字序列中连续数字的缺失或重复问题。示例代码展示了如何实现这些方法。

题目详细:

解题思路:

这题的难点

主要在于对于数据的读入

以及对于两个数字的查找

对于数据的读入:

1.直接对单行字符串进行转换:

题目所给出的输入只有行数

并不知道一行有多少个数字

所以我们采用一下读取一行

然后对一行的结果进行读入

首先展示一种比较容易理解的读入:

int k=0;
while(cnt--){
        getline(cin,line);//读取一行
        
        for(int i=0;i<line.length();i++){
            while(line[i]!=' '&&line[i]!='\0'){//对读入的字符进行转换
                a[k]=a[k]*10+line[i]-'0';
                i++;
            }
            k++;
        }
    }

2.利用stringstream将字符串转换:

其中利用的原理是:

stringstream转化的数值会按照转化不了的值进行分割,

举个栗子:

对于字符串:
int a[100];
string s="12 34 56 34 23";
用stringstream ss;
ss<<s;
int i=0;
while(ss<<a[i]) i++;
就会把s中的数字依次放入到数组a中
a[100]={12,34,56,34,23......};

所以读入题目数据代码:

while(cnt--){
        getline(cin,line);
        stringstream ss;
        ss<<line;
        
        while(ss>>a[n]) n++;
    }

对于断号和重号的查询:

映射查找:

对于读入的数据我们可以通过

映射到一个数组

2表示出现过两次,1表示该数出现过一次,0表示没有出现过

然后就可以找到题目正解

排序查找:

我们也可以先把数据排好序

然后遍历一遍

两数之间间隔为2表示存在缺号情况

间隔为0表示存在重号

详细代码:

#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstring>
using namespace std;

const int N=1e4+6;

int a[N];
int n;
int main(){
    int cnt;
    cin>>cnt;
    string line;
    getline(cin , line);//getline会读取回车,所以先把回车提前读取
    
    while(cnt--){
        getline(cin,line);
        stringstream ss;
        
        ss<<line;
        
        while(ss>>a[n]) n++;
    }
    
    sort(a,a+n);
    
    int dh,ch;
    for(int i=0;i<n;i++){
        if(a[i]==a[i+1]) ch=a[i];
        if(a[i+1]-a[i]>1) dh=a[i]+1;
    }
    
    cout<<dh<<" "<<ch;
    return 0;
}

PS:不知乘月几人归,落月摇情满江树。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XDU-Yoghurt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值