AcWing 1204.错误票据(读取未知个数数据的新方法)

发布时间:2024年01月20日

[题目概述]

某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的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;  
      }
      
  • 完整代码
    将数据按行读取,再确定数量,排序,完成判断要求即可
#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这个类,会使用即可
    本题的分享就结束啦,有问题的小伙伴可以将问题发在评论区
    别忘了点赞收藏加关注!
文章来源:https://blog.csdn.net/nuc_ghp/article/details/135708398
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。