• 蓝桥杯 第一次校训 续篇


    1.

    题目描述
    小P最近人生得意,去参加了一次相亲大会,相亲大会上每个人有一个密码牌(密码牌上的密码是一个正整数m,m<231 ),相互之间在交流之前先交换密码牌,密码牌上的密码可能相同,也可能不同,如果相同,两人牵手离开,如果不保同,各自再寻找下一位,保证最后只有1个人或2个人留下来。

    输入
    第一行两个数 n,k (n3000000,1≤k≤2),n表示参加相亲大会的人数,接下来 n行每行一个正整数表示相亲大会上每一个人的密码,k表示最后留在相亲大会的人数。
    输出
    从小到大输出一行 k个数,表示相亲不成功留在相亲大会人的密码,中间用空格分隔。
    看到题目首先想到的是凉凉两两配对,当然是相同的配对,所以自然而然地就想到了排序,但是怎么把相同的两个数给他想个办法隔过去呢?这又是一个新的问题,所以想如果两个相同就运用两次加加,具体看代码叭。
    代码实现:
     1 #include<bits/stdc++.h>  
     2 using namespace std; 
     3 long long ll;
     4 const int maxn=3e6+5;  
     5 int n,k;
     6 int a[maxn];
     7 int main()
     8 {    int i;
     9     scanf("%d%d",&n,&k);
    10     for(i=0;i<n;i++)
    11     scanf("%d",&a[i]);
    12     sort(a,a+n);
    13     int dis=k;
    14     for(i=0;i<n;i++)
    15     {
    16         if(a[i]==a[i+1]) 
    17         i++;
    18         else 
    19         {
    20             printf("%d",a[i]);
    21             dis--;
    22             if(dis==0) return 0;
    23             else if(dis==1) printf(" "); 
    24         }
    25     }
    26     return 0;
    27 }

     因为有限制了留下的人的数量,所以巧妙地利用一个参数来达到目的。

    2.

    小P最近在研究字符编码,给出一串由0、1组成的字符串,从中任意进行截取,如果截取的字符串对应一个英文字母的ASCII值,小P就把这个0、1串叫字母子串,问给定的字符串最多能截取出多少个字母子串。

    输入

    测试数据有多组,每组一行由0、1组成的字符串,每行长度不超过10000。 

    输出

    对于每组输入,在一行中输出最多可以截取的字母子串的数量。 

    这道题比赛的时候当然没有做出来了,因为连题目都没看懂,所以,只能暗自神伤自己暗戳戳的下来研究了,结果我发现!!!c++对于字符串来说真是个好东西啊啊啊啊,用c写太麻烦了,于是借鉴了其他大佬的c++,结果发现真香!!!

    这道题目就是截取七个字符判断其是不是字母范围内,如果不是指针后移1位,如果是指针后移6位,话不多说,上代码。

    代码实现:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 using namespace std;
     5 int zh(string a)
     6 {
     7     int d=0;
     8     for(int i=0;i<a.size();i++)
     9     d=d*2+a[i]-'0';
    10     return d;
    11  } 
    12  int main()
    13  {  string a,b;
    14      int i;
    15      while(cin>>a)
    16      {   
    17          int sum=0,num=0;
    18          for(i=0;i+6<a.size();i++)
    19          {
    20              string c=a.substr(i,7);//从i开始截七个字符组成一个串。 
    21              num=zh(c);
    22              if(num>=65&&num<=90||num>=97&&num<=122)
    23              {
    24                       sum++;i=i+6;
    25              }
    26      
    27          }
    28          cout<<sum<<endl;
    29     }
    30      
    31      return 0;
    32  }
    33  
     
  • 相关阅读:
    NSRunLoop 详解
    Delphi经验总结(2)
    Delphi经验总结(3)
    卸载Windows服务
    Windows 8操作技巧之快捷键大全
    delphi 换行操作 Word
    现在, Delphi 的多线程已经非常易用了!
    XP 之后, Delphi 动注册表不方便了...逼出来一个办法:
    写了一个字符串的二维表: TSta
    现在使用控件, 更喜欢继承
  • 原文地址:https://www.cnblogs.com/yuanqingwen/p/10479426.html
Copyright © 2020-2023  润新知