錯誤票據
2019-11-14 12:17:05
供稿:網友
//錯誤票據#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;}