某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
要求程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。
每个整数代表一个ID号。
要求程序输出1行,含两个整数m n,用空格分隔。
其中,m表示断号ID,n表示重号ID
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;
}
}
}*/
原文:http://www.cnblogs.com/icode-girl/p/5255345.html