• 第五届“传智杯”全国大学生计算机大赛(练习赛)题解


    A - T292219 [传智杯 #5 练习赛] 复读

    题目链接

    知识点:字符串

    题意

     给你多个字符串,字符串为0表示所有的字符串都已读完,并且0不被认为是一个非复读字符串。如果后面的字符串与前面的字符串相同,则被当做是复读字符串,首次出现的字符串是非复读字符串。要求将所有的非复读字符串按照行号从小到大连接的结果输出。

    思路

    1.首先,是多个字符串因此需要动态的去进行记录

    2.然后需要记录字符串的状态,将后面与前面相同的进行标记区分

    3.最后将状态未改变的也就是非复读字符串进行输出

    坑点

    代码

    1. #include
    2. using namespace std;
    3. vectorv;
    4. int main()
    5. {
    6. string s;//读入的多个字符,所以用字符串定义
    7. while(cin>>s)//当读入 字符串时
    8. {
    9. if(s=="0")//如果说字符串等于 0,则停止读入字符串
    10. {
    11. break;
    12. }
    13. int f=1;//定义状态为 1
    14. for(auto i:v)//用 i 遍历动态数组 v
    15. {
    16. if(i==s)//如果遍历的 i 跟字符串相同
    17. {
    18. f=0;//那么改变状态
    19. break;//并停止
    20. }
    21. }
    22. if(f!=0)//如果字符串对应的状态不等于 0 的话则输出对应的字符串
    23. {
    24. cout<
    25. v.push_back(s);//并把字符串放入 vector数组中
    26. }
    27. }
    28. return 0;
    29. }

    总结

    难度稍易,注意遍历vector需使用auto。

    B - T292112 [传智杯 #5 练习赛] 时钟

    题目链接

    知识点:模拟

    题意

    给你有一个分钟数,问从出有从零至所给分钟数好时刻出现了多少次。

    而好时刻是指从零到所给分钟数,而这些数依次组成了一个等差数列

    思路

    1. 将所给的分钟数转化成多少天余多少个小时

    2. 将时间制的四个位置的对应的数算出来

    3. 从零到所给分钟数进行遍历分情况(小时数大于等于10和小时数小于10)判断是否是好时刻进行记录

    坑点

    1.分钟数判断需分情况分为大于等于10个小时和小于10的小时的情况进行判断

    代码

    1. #include
    2. using namespace std;
    3. int n,days,ans=0;//分钟数,天数,好时刻数
    4. int main()
    5. {
    6. cin>>n;//读入分钟数
    7. days=n/1440;//一天共有1440分钟,用总的分钟数除以1440也就是有几天
    8. n%=1440;//n%1440求出余下的分钟数
    9. ans=days*39;//ans表示好时刻数,即用天数乘以39,一天共有39个好时刻
    10. for(int h=0;h<24;h++)//遍历一天的小时数
    11. {
    12. for(int m=0;m<60;m++)//再遍历一天的分钟数
    13. {
    14. int a,b,c,d;
    15. a=h/10;//a表示十位上的时间 ,即几十小时
    16. b=h%10;//b表示个位上的时间 ,即几小时
    17. c=m/10;//c表示十位上的分钟数,即几十分钟
    18. d=m%10;//d表示个位上的分钟数,即几分钟
    19. if(h>=10&&b-a==c-b&&c-b==d-c)//如果大于等于10小时,当b-a==c-b并且c-b==d-c时则表示等差是好时刻
    20. {
    21. ans++;
    22. }
    23. if(h<=9&&c-b==d-c)//如果小于10小时并且,那么a等于0,当c-b==d-c构成等差则属于好时刻
    24. {
    25. ans++;//好时刻++
    26. }
    27. n--;//遍历时间
    28. if(n<0)//时间遍历完了
    29. {
    30. break;//则停止
    31. }
    32. }
    33. }
    34. cout<//输出好时刻数
    35. return 0;
    36. }

    总结

    难度简单,各个位置的值需耐心分析,并小时数分情况进行分析。

    C - T292113 [传智杯 #5 练习赛] 平等的交易

    题目链接

    知识点:贪心

    题意

    给你n个道具,并给出对应每个道具的价格,最后给出现在拥有的钱。

    你可用钱购买其中的一件道具,也可拿手中的道具换取其他的道具,但是其他的道具的价值之和不能超过打算交换出去的道具。可交换多次道具,交换到的道具的价值可能为0.

    问最多可换取到多少件道具

    思路

    1.首先排序

    2. 用钱买最贵的那一个

    3.用最贵的一个去尽可能换价值低的,能拿就拿。

    4.进行计数

    D - T292114 [传智杯 #5 练习赛] 清洁工

    题目链接

    知识点:模拟

    E - T292115 [传智杯 #5 练习赛] 树的变迁

    题目链接

    知识点:数据结构(树和并查集)

    F - T293037 [传智杯 #5 练习赛] 白色旅人

    题目链接

    知识点:动态规划

  • 相关阅读:
    搭建自己的pypi服务器
    LeetCode 42.接雨水
    CVPR2020-视觉不平衡立体匹配
    vue3的ref和reactive
    MongoDB数据库协议解析及C/C++代码实现
    杭电oj 2046 骨牌铺方格 C语言
    初识Node.js与内置模块
    VMWare Ubuntu压缩虚拟磁盘
    迅速上手:CentOS 系统下 SSH 服务配置指南
    学习java第七十四天
  • 原文地址:https://blog.csdn.net/m0_63353853/article/details/127954025