您的位置:首页 > 其它

蓝桥杯 错误票据

2015-04-25 19:38 260 查看
这道题很简单,测试数据也很水,按理说我的程序遇到大一点的数据就过不去了,可是后台只有两组数据,最大的只到2000+,数组开大一点不就好啦。。。于是一开始,开了一个巨大巨大的数组,这么蠢的方法真是不好意思

#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main(){
int n, i, len, num, min = 99999, max = 0;
int chong, que, flag;
int table[3000] = {0};
char a[10000];
scanf("%d", &n);
getchar();
while( n--){
gets(a);
len = strlen(a);
num = 0;
flag = 0;
for( i = 0; i <= len; i++){
if( !isdigit(a[i])){
if( flag == 1){
if( num > max){
max = num;
}
if( num < min){
min = num;
}
if( table[num]){
chong = num;
}
else{
table[num] = 1;
}
num = 0;
flag = 0;
}

}
else{
num = num * 10 + a[i] - '0';
flag = 1;
}
}

}
for( i = min; i <= max; i++){
if( table[i] == 0){
que = i;
break;
}
}
printf("%d %d", que, chong);
return 0;
}


因为实在是太不好意思了,于是弄了一个不那么蠢的,起码按要求排了一个序。。。

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
int cmp( const void* a, const void* b){
return *(int*)a - *(int*)b;
}
int main(){
int n, i, j = 0, len, num;
int que, chong, size, flag;
int table[3000] = {0};
char a[10000];
scanf("%d", &n);
getchar();
while( n--){
gets(a);
len = strlen(a);
num = 0;
flag = 0;
for( i = 0; i <= len; i++){
if( !isdigit(a[i])){
if( flag == 1){
table[j] = num;
j++;
num = 0;
flag = 0;
}
}
else{
num = num * 10 + a[i] - '0';
flag = 1;
}
}
}
qsort( table, j, sizeof(int), cmp);
for( i = 1; i < j; i++){
if( table[i] == table[i-1] + 2){
que = table[i-1] + 1;
}
if( table[i] == table[i-1]){
chong = table[i];
}
}
printf("%d %d", que, chong);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: