[题目概述]
某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。假设断号不可能发生在最大和最小号。
输入格式
第一行包含整数 N,表示后面共有 N 行数据。
接下来 N 行,每行包含空格分开的若干个(不大于100个)正整数(不大于100000),每个整数代表一个ID号。
输出格式
要求程序输出1行,含两个整数 m,n,用空格分隔。
其中,m 表示断号ID,n 表示重号ID。
数据范围
1 ≤ N ≤ 100
输入样例:
2
5 6 8 11 9
10 12 9
输出样例:
7 9
- 题目分析
很明显此题目的难点就是如何读入这些数据和怎样确定数据的数量。在解决这个问题后就是将数组排序,判断重号和断号。- stringstream类
它其实就是字符串和其他数据类型转换的中间介质- 需要头文件
#include <sstream>
- 将字符串转化为其他类型(int举例)
#include <sstream> #include <string> #include <iostream> using namespace std; int main() { string str = "12345"; stringstream ss(str); int number; ss >> number; // 从字符串读取整数 cout << "Number: " << number << endl; // 输出: Number: 12345 return 0; }
- 将其他类型转为字符串(int举例)
#include <sstream> #include <string> #include <iostream> using namespace std; int main() { int number = 12345; stringstream ss; ss << number; // 向流中写入整数 string str; ss >> str; // 从流中读取字符串 cout << "String: " << str << endl; // 输出: String: 12345 return 0; }
- stringstream类
- 完整代码
将数据按行读取,再确定数量,排序,完成判断要求即可
#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>using namespace std;int cnt,n;
const int N = 100010;
int a[N];//存放读入的数据
string line;int s1, s2;
int main(){cin >> cnt;getline(cin, line);//忽略第一个换行符//输入数据while (cnt --){//读取每一行字符串,从中分割出每一个数getline(cin, line);//用输入流,将一行字符串读入到line中stringstream ssin (line);while (ssin >> a[n]) n++;// 统计一共有多少个数,读到文件结尾结束}//排序sort(a, a + n);//遍历数组,找出重号和断号for(int i = 1;i <= n;i ++){if(a[i] == a[i - 1]) s2 = a[i];//重号else if(a[i] - a[i - 1] == 2) s1 = a[i] - 1; //断号}cout << s1 << " " << s2 << endl;return 0;
}
- 本题主要学习stringstream这个类,会使用即可
本题的分享就结束啦,有问题的小伙伴可以将问题发在评论区
别忘了点赞收藏加关注!