标签:假设 code iter etl header 直接 mes 格式 这不
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
要求程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。
每个整数代表一个ID号。
要求程序输出1行,含两个整数m n,用空格分隔。
其中,m表示断号ID,n表示重号ID
1 /* 2 - 初见,内存也足够,桶排序的话时间也够 3 - 难点在于换行输入的处理,一般的输入会吃掉换行符 4 - 这不是算法的初衷...... 5 */ 6 #include<iostream> 7 #include<cstring> 8 #include<cstdio> 9 #include<string> 10 using namespace std; 11 12 const int MAX = 100001; 13 int t[MAX]; 14 int s = MAX, e = 0; 15 16 // 整数快速幂 17 int pow(int x, int n) 18 { 19 if(n == 0) return 1; 20 int s = 1; 21 while(n) 22 { 23 if(n&1) s *= x; 24 x *= x; 25 n >>= 1; 26 } 27 return s; 28 } 29 30 void join(string x) 31 { // 手动分词吧,反向迭代器可以避免考虑数的位数 32 string::reverse_iterator rite; 33 int i = 0, n = 0; 34 rite = x.rbegin(); 35 while(rite!=x.rend()) 36 { 37 if(*rite == ‘ ‘){ 38 if(i < s) s = i; 39 if(i > e) e = i; 40 rite++;t[i]++; 41 i = 0;n = 0; 42 continue; 43 } 44 i += (int(*rite)-‘0‘) * pow(10, n);n++; 45 rite++; 46 } 47 return; 48 } 49 50 int main() 51 { 52 int n; 53 string temp; 54 while(cin>>n) 55 { getline(cin, temp); // 这是关键,接收输入n时多出的回车 56 memset(t, 0, sizeof(t)); 57 for(int i=0;i<n;i++){ 58 // 逼急了,直接上getline 59 // 尽管C++有它自己的分词工具,这里就涉及到我的知识盲区了 60 string x; 61 getline(cin, x, ‘\n‘); 62 x = ‘ ‘ + x; // 注意补充空格 63 join(x); 64 } 65 int ans[2] = {0}; 66 for(int i=s;i<=e;i++){ 67 if(t[i] == 0) ans[0] = i; 68 if(t[i] == 2) ans[1] = i; 69 } 70 cout<<ans[0]<<" "<<ans[1]<<endl; 71 } 72 73 return 0; 74 } 75 /*------------------------------------------------------*/ 76 /* 77 int main() 78 { 79 int n; 80 while(cin>>n) 81 { 82 int t[MAX]; 83 memset(t, 0, sizeof(t)); 84 int s = MAX, e = 0, x = 0; 85 while(n != -1) 86 { 87 x = getchar(); // 烦人的空格处理 88 if(x == ‘\n‘){ 89 n--;continue; 90 } 91 ungetc(x, stdin); 92 // scanf("%d", &x); 93 cin>>x; 94 t[x]++; 95 if(x < s) s = x; 96 if(x > e) e = x; 97 } 98 for(int i=s;i<=e;i++){ 99 if(t[i] == 0) cout<<i<<" "; 100 if(t[i] == 2){ 101 cout<<i<<endl;break; 102 } 103 } 104 } 105 106 return 0; 107 } 108 */
2019-01-18
20:28:14
标签:假设 code iter etl header 直接 mes 格式 这不
原文地址:https://www.cnblogs.com/mabeyTang/p/10289581.html