蓝桥杯2013 B组省赛

7、错误票据

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

每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。

因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。

你的任务是通过编程,找出断号的ID和重号的ID。

假设断号不可能发生在最大和最小号。

要求程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000)
每个整数代表一个ID号。

要求程序输出1行,含两个整数m n,用空格分隔。
其中,m表示断号ID,n表示重号ID
看到这种题就想用散列 但是好想简单的cin cout是不会区分空格和换行的

我不会的知识复习

1、每行输入长度不等的数------->用getchar()接受空格 如果不是空格就进入了下一行
2、散列的0和缺失数据的0冲突------>因为连续记录最大最小

中间用了尝试的getchar emmmmmmm输入的数据是char强制转换也转不回来了

#include     
int main()  
{  
    int a[10001]={0};  //初始化数组 
    long m,min=100000,max=0,i,n;
    char c;
    scanf("%d",&n);
        for(i=0;imax) max=m;
                if(m

小明正在玩一个“翻硬币”的游戏。

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

比如,可能情形是:oo*oooo

如果同时翻转左边的两个硬币,则变为:oooo***oooo

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:

程序输入:
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000

程序输出:
一个整数,表示最小操作步数
我无数次想把string当int数组加减得用了……我是个智障好了
然后还被最小操作步骤误导,其实就是见到不一样翻就对了……会不会存在翻了过了要求的还不是要的?不会,是一个一个判断的,不一样就翻了,会不会比从头对比开始翻更简单的方法……我脑子成天在想什么

#include
#include
#include
using namespace std;
string s1,s2;
int p1[1005],p2[1005];
int ans=0;
int main(){
    cin>>s1>>s2;
    //输入数据处理
    for(int i=0 ;i

10.连号区间数
这个题主要考脑子

解题关键:

判断是否有序:if((max-min) == (j-i))

题目如下:

小明这些天一直在思考这样一个奇怪而有趣的问题:

在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:

如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。

当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。

输入格式:
第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模。
第二行是N个不同的数字Pi(1 <= Pi <= N), 表示这N个数字的某一全排列。

输出格式:
输出一个整数,表示不同连号区间的数目。

示例:
用户输入:
4
3 2 4 1

程序应输出:
7

用户输入:
5
3 4 2 5 1

程序应输出:
9

解释:
第一个用例中,有7个连号区间分别是:[1,1], [1,2], [1,3], [1,4], [2,2], [3,3], [4,4]
第二个用例中,有9个连号区间分别是:[1,1], [1,2], [1,3], [1,4], [1,5], [2,2], [3,3], [4,4], [5,5]

#include
int main()
{
    int s[50005],a,i,min,max,count=0,j;
    scanf("%d",&a);
    for( i = 0; i < a; i++) {
        scanf("%d",&s[i]);
    }
    for( i = 0; i < a;i++ ){ 
        min=s[i];
        max=s[i];
        for( j = i; j < a; j++) {
            if(min>s[j]){min =s[j];}
            if(max

总结一下
10道题两道看了答案也不会……怕是凉 先看看别的再回来

你可能感兴趣的:(蓝桥杯2013 B组省赛)