问题描述
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
输入格式
要求程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。
每个整数代表一个ID号。
输出格式
要求程序输出1行,含两个整数m n,用空格分隔。
其中,m表示断号ID,n表示重号ID
样例输入1
2
5 6 8 11 9
10 12 9
5 6 8 11 9
10 12 9
样例输出1
7 9
超级水的水题,然而第一次直接用scanf("%d", &num);处理空格的时候TLE了。然后换成gets(s);第一次WA了50%数据吧。因为找loseans的时候出现了点问题。按照我的思路,找这两个答案是有顺序的说。【反正就是笨笨的我在除了输入之外的那个找loser也卡了T_T】
附right代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #include <algorithm> 5 #define inf 1000000000 6/span> using namespace std; 7 8 char str[1010]; 9 int num[210]; 10 11 int main() 12 { 13 int temp; 14 int n, cnt, cans, lans; 15 while(~scanf("%d", &n)) 16 { 17 getchar(); 18 cnt = 0; 19 20 while(n--) 21 { 22 temp = inf; 23 gets(str); 24 int len = strlen(str); 25 for (int i=0; i<len; ++i) 26 { 27 if (str[i] == ' ' && temp != inf) 28 { 29 num[cnt++] = temp; 30 temp = inf; 31 } 32 else if (str[i] >= '0' && str[i] <= '9') 33 { 34 if (temp == inf) 35 { 36 temp = str[i] - '0'; 37 } 38 else temp = temp * 10 + str[i] - '0'; 39 } 40 if (i == len-1 && temp != inf) 41 { 42 num[cnt++] = temp; 43 temp = inf; 44 } 45 } 46 } 47 /* int k; 48 for(int i=0; i<n; i++) 49 { 50 gets(str);//用gets可以输入空格 51 //可以边输入边判断 52 int len=strlen(str); 53 for(int j=0; j<len; j++) 54 { 55 if(str[j]>='0'&&str[j]<='9') 56 { 57 int now=0; 58 for(k=j; str[k]!=' '&&k<len; k++) 59 //注意k也要在字符串长度之内 60 { 61 now=now*10+str[k]-'0'; 62 } 63 num[cnt++]=now; 64 j=k; 65 } 66 } 67 }*/ 68 69 sort(num, num+cnt); 70 int id; 71 72 for (int i=0; i<cnt-1; ++i) 73 { 74 if (num[i] == num[i+1]) 75 { 76 cans = num[i]; 77 id = i; 78 break; 79 } 80 } 81 82 lans = inf; 83 84 for (int i=0; i<id; ++i) 85 { 86 if (num[i] != num[0] + i) 87 { 88 lans = num[0] + i; 89 break; 90 } 91 } 92 93 if (lans == inf) 94 { 95 for (int i=id+1, j=0; i<cnt; ++i, ++j) 96 { 97 if (num[i] != cans+j) 98 { 99 lans = cans+j; 100 break; 101 } 102 } 103 } 104 cout << lans << " " << cans << endl; 105 } 106 return 0; 107 }
额。交完又发现别人家的代码就是长得好看啊~~~
这样多机智,为什么我一定要写的那么抽捏~~~【字符串处理成数组的时候】
/* int k; for(int i=0; i<n; i++) { gets(str);//用gets可以输入空格 //可以边输入边判断 int len=strlen(str); for(int j=0; j<len; j++) { if(str[j]>='0'&&str[j]<='9') { int now=0; for(k=j; str[k]!=' '&&k<len; k++) //注意k也要在字符串长度之内 { now=now*10+str[k]-'0'; } num[cnt++]=now; j=k; } } }*/