1204. 错误票据

编程入门 行业动态 更新时间:2024-10-28 11:29:34

1204. 错误<a href=https://www.elefans.com/category/jswz/34/1764088.html style=票据"/>

1204. 错误票据

题目:

1204. 错误票据 - AcWing题库

思路: 

将输入的数据存入数组,从小到大排序后遍历,若 (a[i] == a[i - 1])res1 = a[i]--->重号;若(a[i] - a[i - 1] >= 2)res2 = a[i] - 1--->断号。

难点:题目只告诉我们输入几行,且并不知道每行有多少个,因此无法直接将输入数据存入定义好的连续数组。(cin无法处理换行符)

1.针对上述情况,我们可以先用getline(cin,line)将整行数据(包括空格)先存入字符串(string)变量中。再定义字符串流stringstream对象ssin,并将前面读取的line传递给它。

这样,你可以使用ssin来解析和操作字符串中的数据。接下来的循环while (ssin >> a[n])n++;在每次循环中从ssin中读取一个整数,并保存到数组a中。(字符串中的空格也就不会进入数组a[])

代码:

 

#include<iostream>
#include<sstream>//字符串流头文件
#include<algorithm>
#include<string>
using namespace std;
int n;//表示ID号码数量
const int N = 10010;
int a[N];
int main()
{int cnt;//表示行数cin >> cnt;string line;getline(cin, line);//忽略掉第一行的回车while (cnt--) {getline(cin, line);//读入一行数据存入linestringstream ssin(line);//定义一个字符串流对象ssin,初始化为linewhile (ssin >> a[n])n++;//这里的ssin会将其中的整数传出,且不会将空格传入数组a[]中}sort(a, a + n);int res1, res2;for (int i = 1; i < n; i++)if (a[i] == a[i - 1])res1 = a[i];//重号else if (a[i] - a[i - 1] >= 2)res2 = a[i] - 1;//断号cout << res2 << " " << res1;}

特别注意:

使用getline读入一整行时,如果之前写过cin,由于cin中有默认换行,getline会将其也读入,使得字符串类型的变量line的第一个元素是空的。因此,我们需要在读入之前先getline(cin, line)--->忽略掉第一行的回车。(不要问为什么这样写,c++爸爸规定滴)

更多推荐

1204. 错误票据

本文发布于:2023-11-15 05:24:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1594426.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:票据   错误

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!