历届试题 错误票据

问题描述

某涉密单位下发了某种票据,并要在年终全部收回。

每张票据有唯一的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

样例输出1

7 9

样例输入2

6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158 
128 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119

样例输出2

105 120

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int id[100001];
char c[7];//保存整型数
int main()
{
    int N,i,j,a;
    int bnum,rnum;
    int flag;
    char t;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&a);
        id[a] += 1;
        while(1)
        {
            memset(c,‘\0‘,7);//每次接收一个整数之前必须要初始化
            j = 0;
            while(scanf("%c",&c[j]) && c[j] == ‘ ‘);//处理行内可能的多个空格,接收数字或换行时则跳出循环
            if(c[j] == ‘\n‘)
                break;
            scanf("%c",&c[j+1]);
            if(c[j+1] == ‘\n‘ || c[j+1] == ‘ ‘)//表示整数仅有一位
            {
                a = c[j] - ‘0‘;
                id[a] +=1;
                if(c[j+1] == ‘\n‘)
                    break;
            }
            else{
                j += 2;
                scanf("%c",&c[j]);
                while(c[j] >=‘0‘ && c[j] <= ‘9‘)
                {
                    j ++ ;
                    scanf("%c",&c[j]);
                }
                t = c[j];
                c[j] = ‘\0‘;//尽管memset已经将c全部初始化为‘\0‘,但是可能因为接收到空格而跳出上面的循环
                a = atoi(c);//将字符串转化为整数
                id[a] += 1;
                if(t == ‘\n‘)//需要对换行进行处理
                    break;
            }
        }
    }
    for(i=0;i<100001;i++)
        if(id[i]==1)
            break;
    flag = 0;
    for(j=i+1;j<100001;j++)//id数组里面可能有很多0,我们取ID号首尾之间的0,即从首ID号之后的第一个0
    {
        if(id[j] == 0 && !flag)
        {
            bnum = j;
            flag ++;
        }
        else if(id[j] == 2){
            rnum = j;
        }
    }
    printf("%d %d\n",bnum,rnum);
    return 0;
}

测试数据都很弱啊,怎么会超时???真心不懂

时间: 2024-10-26 10:13:36

历届试题 错误票据的相关文章

1503150049-蓝桥杯-历届试题 错误票据

历届试题 错误票据 时间限制:1.0s   内存限制:256.0MB 问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号. 你的任务是通过编程,找出断号的ID和重号的ID. 假设断号不可能发生在最大和最小号. 输入格式 要求程序首先输入一个整数N(N<100)表示后面数据行数. 接着读入N行数据. 每行数据长度不等,

【蓝桥杯】历届试题 错误票据

  历届试题 错误票据   时间限制:1.0s   内存限制:256.0MB 问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号. 你的任务是通过编程,找出断号的ID和重号的ID. 假设断号不可能发生在最大和最小号. 输入格式 要求程序首先输入一个整数N(N<100)表示后面数据行数. 接着读入N行数据. 每行数据长

蓝桥杯 历届试题 错误票据(水)

历届试题 错误票据 时间限制:1.0s   内存限制:256.0MB 问题描写叙述 某涉密单位下发了某种票据.并要在年终所有收回. 每张票据有唯一的ID号.全年全部票据的ID号是连续的.但ID的開始数码是随机选定的. 由于工作人员疏忽.在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号. 你的任务是通过编程,找出断号的ID和重号的ID. 如果断号不可能发生在最大和最小号. 输入格式 要求程序首先输入一个整数N(N<100)表示后面数据行数. 接着读入N行数据. 每行数据长度不

蓝桥杯:历届试题 错误票据【JAVA算法实现】

题目描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号. 你的任务是通过编程,找出断号的ID和重号的ID. 假设断号不可能发生在最大和最小号. 输入格式 每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格. 每个整数代表一个I

【蓝桥杯】PREV-5 错误票据

题目链接:http://lx.lanqiao.org/problem.page?gpid=T28 历届试题 错误票据 时间限制:1.0s   内存限制:256.0MB 问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号. 你的任务是通过编程,找出断号的ID和重号的ID. 假设断号不可能发生在最大和最小号. 输入格式

1503140001-蓝桥杯-历届试题 分糖果

历届试题 分糖果 时间限制:1.0s   内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数. 反复进行这个游戏,直到所有小朋友的糖果数都相同为止. 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果. 输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数. 接着是一行用空格分开的N个偶数(

【蓝桥杯】历届试题 小朋友排队(运行超时)

  历届试题 小朋友排队   时间限制:1.0s   内存限制:256.0MB 问题描述 n 个小朋友站成一排.现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友. 每个小朋友都有一个不高兴的程度.开始的时候,所有小朋友的不高兴程度都是0. 如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推.当要求某个小朋友第k次交换时,他的不高兴程度增加k. 请问,要让所有小朋友按从低到高排队,他们的不高兴

【蓝桥杯】历届试题 公式求值

  历届试题 公式求值   时间限制:1.0s   内存限制:256.0MB 问题描述 输入n, m, k,输出下面公式的值. 其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数.组合数的计算公式如下. 输入格式 输入的第一行包含一个整数n:第二行包含一个整数m,第三行包含一个整数k. 输出格式 计算上面公式的值,由于答案非常大,请输出这个值除以999101的余数. 样例输入 313 样例输出 162 样例输入 201010 样例输出 359316 数据规模和约定 对于1

【蓝桥杯】历届试题 买不到的数目

  历届试题 买不到的数目   时间限制:1.0s   内存限制:256.0MB 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有些糖果数目是无法组合出来的,比如要买 10 颗糖. 你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17.大于17的任何数字都可以用4和7组合出来. 本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字. 输入格式 两个正整数,表示每种包装中糖的颗