错误票据
2019-11-14 11:45:37
供稿:网友
//错误票据#include <cstdio>#include <algorithm>#include <cstring>#include <iostream>using namespace std;const int maxn = 10000 + 5;int n,a[maxn],b[maxn];char s[100];int main(){ memset(b,0,sizeof(b)); cin >> n; gets(s);//用gets(),来存储n后面的一个换行符 //gets()函数 function:从stdio流中读取字符串,直至接受到换行符或EOF时停止, //并将读取的结果存放在buffer指针所指向的字符数组中。 //换行符不作为读取串的内容,读取的换行符被转换为‘/0’空字符,并由此来结束字符串。 int len = 0; int k = -1; for(int i = 0; i < n; i++){ gets(s + 1); s[0] = ' ';//把读取的'/0'字符置换为' ' int flag = 0; for(int j = 0; s[j]; j++){ if(s[j - 1] == ' ' && s[j] != ' '){ k = s[j] - '0'; flag = 1; } else if(s[j] == ' '){ if(k != -1){ a[len++] = k; //说明是某个数,并存入a数组中 } flag = 0; k = -1; } else if(flag){ //if前一个是数字字符 k = k*10 + s[j] - '0'; } } } if(k != -1) a[len++] = k; sort(a,a + len); int start = a[0]; //start是数组a的第一个数 int x = 0,y = 0; //利用下标,将0-start的b[i]赋值为1,利用的“桶”的思想, //如果b[i] == 1,则该下标i这个数正常, //如果b[i] == 0,则缺少此时i这个数, //如果b[i] == 2,则这个此时i这个数重复 for(int i = 0; i < start; i++) b[i] = 1; for(int i = 0; i < len; i++){ b[a[i]]++; } for(int i = 0; i < len + start; i++){ if(b[i] == 0) x = i; if(b[i] == 2) y = i; } cout << x << " " << y << endl; return 0;}