为了各位朋友的身心健康(不是),我们按照题目难度顺序来写题解。

第一次写题解,希望多点包容和鼓励(恬不知耻


1:谁先输出-4

题意:

输入3个整数,按从大到小的顺序输出,每两个数字间加一个空格。

题解:

输入三个数,用一下排序(冒泡/选择 排序法,或者 A?B:C),然后就可以输出了。

上板子(冒泡排序法):

  1. for (int i = 1;i < n;i++)
  2. {
  3. for (int j = 1;j <= n - i;j++)
  4. {
  5. if (t[j] > t[j + 1])
  6. swap(t[j], t[j + 1]);
  7. }
  8. }

13:星号阵列-16

题意:

上下拼接正方形,同位置重合只显示一条边。

题解:

可以看做输出b个,最后输出一行的星号。

上板子(使用循环):

  1. int main()
  2. {
  3. int a, b;
  4. cin >> a >> b;
  5. for (int i = 1;i <= b;i++)
  6. {
  7. for (int j = 1;j <= a-1;j++)
  8. {
  9. if (j == 1)
  10. {
  11. for (int p = 1;p <= a;p++)
  12. {
  13. cout << "*";
  14. }
  15. cout << endl;
  16. }
  17. else
  18. {
  19. for (int p = 1;p <= a;p++)
  20. {
  21. if (p == 1 || p == a)cout << "*";
  22. else cout << " ";
  23. }
  24. cout << endl;
  25. }
  26. }
  27. }
  28. for (int u = 1;u <= a;u++)
  29. {
  30. cout << "*";
  31. }
  32. cout << endl;
  33. return 0;
  34. }

3:最大的乘积

题意:

找两个数,使它们的乘积最大,然后输出这个乘积。

题解:

依题意,本题给的数据不一定是正数,所以需要通过排序找到最大的两个数跟最小的两个数,分别计算它们的乘积,输出较大的那个。

上板子(依然是冒泡排序法):

  1. for (int i = 1;i < m;i++)
  2. {
  3. for (int j = 1;j <= m - i;j++)
  4. {
  5. if (a[j] > a[j + 1])
  6. swap(a[j], a[j + 1]);
  7. }
  8. }//循环结束后,把最后的两个数与最前面的两个数的乘积比较一下,输出较大值。

9:沉迷游戏的大佬

题意:

给出经验总值与各级所需经验,求最终等级。

题解:

这题用循环解,每升一级把这一段所需要的经验减去,注意到了满级之后就不能升级了,所以在循环里特判一下是否满级。

上板子:

  1. int n,x,d=1;//n为人物满级等级,x为经验总值,d为人物等级
  2. cin >> n;
  3. int a[1000] = { 0 };
  4. for(int i=1;i<n;i++)
  5. {
  6. cin >> a[i];//升级所需经验
  7. }
  8. cin >> x;
  9. int u = 1;//第几级升级到第几级
  10. while (x >= a[u]&&d<n)//特判一下d是否<n,注意!不论你用for还是while,不能写<=。
  11. {
  12. x -= a[u];
  13. d++;
  14. u++;
  15. }
  16. /*这里如果用for,可写为
  17. for(;x >= a[u]&&d<n;d++)
  18. {
  19. x-=a[u];
  20. u++;
  21. }*/
  22. cout << d;

4:最长的妹纸序列

题意:

记录字符串中F最多连续个数。

题解:

录入一个字符串为男女生的队列,用循环依次判断字符是否为F,如果是则count++,如果不是就把count清零。

上板子(循环判断部分):

  1. for (int i = 0;i < s.length();i++)
  2. {
  3. if (s[i] == 'F')num++;//连续的,下一个为女生,则数量加一
  4. else//遇到男生
  5. {
  6. if (num > n)//假若此时的 num > n(n表示连续的最大值)
  7. n = num; //num 就成为了新的最大值n
  8. num = 0;//记得清零重新计数!!
  9. }
  10. }
  11. if (num > n) n = num;//假如最后一段是最大值
  12. cout << n << endl;

7:石头剪刀布

题意(开始应用题了,其实算法实现上很简单,然鹅你读不懂题目  /滑稽):

两个人石头剪刀布,其中A开了天眼能预先知道苏学长要出的是石头、剪刀还是布。但是A出石头、剪刀、布的次数有一个上限,石头最多出a次,剪刀最多出b次,布最多出c次(可以选择不出)。求A最多能赢几局。

题解:

题目里说了只需要求A最多赢几句,所以不用管她会输几局,然后简化题意之后这道题就会很简单。

就只要在B出剪刀的时候A出石头,所以A最多能赢的局数就只需要把A的石头次数与B的剪刀次数比较,输出较小值.....以此类推(剪刀跟布也用一样的方法算)......

上板子(真的挺简单的,建议自己看懂了做一遍):

  1. string s;
  2. cin >> s;
  3. int a, b, c, o[4] = { 0 };// o 里面存储 b对应的剪刀、布、石头的次数。
  4. cin >> a >> b >> c;
  5. for (int i = 0;i < s.length();i++)
  6. {
  7. if (s[i] == 'j')o[1]++;
  8. else if (s[i] == 'b')o[2]++;
  9. else if (s[i] == 's')o[3]++;
  10. }
  11. int sum = 0;
  12. sum += min(o[1], a);// o[1] 代表的是剪刀, a 代表的是石头,min(o[1],a) 就是A玩家用石头最多能赢几句。
  13. sum += min(o[2], b);
  14. sum += min(o[3], c);
  15. cout << sum << endl;

8:MJ刷题目

题意:

编程竞赛里有n道题目,MJ做第i道题目需要花费t[i]时间。在统计竞赛小分的时候,规定每道题目的小分是:从比赛开始时间到这道题目做出来经历的时间,而MJ的小分将会是每道题的小分之和。假设MJ能够在比赛结束前做出所有题目,并且可以任意调整做题顺序。他想要让自己的小分的值足够小,问小分的最小值是多少?

题解:

很快你就能发现(不是),要小分的值最小,应该把用时短的题目先写了。然后,聪明的你灵光一闪就又知道了,排序、循环后相加。

举个栗子:

假如两道题目,一道题目A用时2分钟,一道题目B用时5分钟。

依据题意,假如先做A,小分为2+(2+5)=9;假如先做B,小分为5+(5+2)=12。

由于每道题的用时里都有前面的用时和,拿第一题举例,这边建议是把第一题的用时乘以题量,就是整个计算中第一题的时间了。对于上面的栗子,我们用这样的方法就可以把它转为:2*2+5*1=9;

上板子(其实主要看题解):

  1. int time = 0;
  2. for (int i = 1;i <= n;i++)//个人习惯, 第一个数组里我一般不存东西,所以从1开始循环。
  3. {
  4. time += t[i] * (n-i+1);
  5. }
  6. cout << time;

10:毒虫养成记

题意:

把毒虫放进一个笼子里,让它们自相残杀,最后存活的毒虫就当成最厉害的毒虫。由于毒虫的毒性各有各的不同,即使很弱小的毒虫也有机会干掉很厉害的毒虫。当A毒虫干掉B毒虫以后,会把B毒虫毒性的一半(如果这个值是小数,则保留其整数部分)加入到自己的毒性中,让自己的毒性变得更强大。草原学姐把一堆毒虫装进了笼中,问最后幸存的毒虫最大的毒性是多少?

题解:

虽然通过的人很多,但是由于我在这里卡了一个小时,所以我把这题的位置往后放了。

依据题意,毒虫A杀了B就可以得到它一半的毒性,且遇到小数时直接取整所以不必考虑毒性为奇数。那么,假如A杀了B,A的毒性将表示为A+B/2。你很快就会发现(不是),由于自相残杀过程中,每一个死去的毒虫都会被浪费50%的毒性,而且这个毒性在后面可能还会被 /2 ,例如C杀了上面的A,那么C的毒性为C+A/2+B/4(你看,B的毒性又被浪费了25%)。所以呢你很快就能得到一个重要结论:

让毒性最强的虫子去杀掉所有的虫子

也就是说除了最强的那个虫子保留原先的毒性,其余 /2 后加进去,这样可以最小限度的浪费毒性。

具体操作:一次循环,找出最大值,其余/2,然后再用一次循环,把除以二之后的加进去。

ps:不知道需不需要啊,我特判了m(虫子数量)=1的情况。

上板子:

  1. int m, a[120] = { 0 };
  2. cin >> m;
  3. if (m == 1)
  4. {
  5. cin >> m;
  6. cout << m << endl;
  7. continue;
  8. }
  9. else
  10. {
  11. for (int i = 1;i <= m;i++)
  12. {
  13. cin >> a[i];
  14. }
  15. int sum = 0;
  16. for (int j = 1;j < m;j++)//排序一次,找出最大值,放在a [m]的位置。
  17. {
  18. if (a[j] > a[j + 1])
  19. swap(a[j], a[j + 1]);
  20. }
  21. for (int i = 1;i < m;i++)//将除了最大的值以外都 /2。
  22. {
  23. a[i] /= 2;
  24. }
  25. for (int j = 1;j <= m;j++)//把 /2 之后的毒虫毒性存到最大的毒虫里。
  26. {
  27. sum += a[j];
  28. }
  29. cout << sum << endl;
  30. }

6:大规模杀伤性好人卡

题意:

有一个叫01的学长整天被妹纸发好人卡。妹纸丢出的好人卡具有范围杀伤效果。离好人卡越远伤害越小,伤害计算公式是:好人卡的伤害-距离,如果这个值为负的,那么当成0,即没有伤害。

有一天,01被妹纸们堵在一条长度为m的直线道路上,妹纸们对01发了很多张好人卡,每张好人卡具有各自的伤害值以及各自落下的位置。而01只能躲在整点的位置上(即0、1、2、...、m,一共m+1个候选位置),请你帮01找一个位置,让01受到的总伤害最小。

题解:

每一张好人卡的造成的伤害=好人卡的伤害-距离。这里要用到一个之前讲过的函数:abs,使用时记得加上它的头文件 #include<stdlib.h>,也就是abs(好人卡的位置-01学长的位置)。注意!表面上问的是你找个位置,最后输出的却是受到的最小伤害的值。

具体操作:

把每张好人卡的伤害存在数组a[ ]中,好人卡的位置存在数组b[ ]中。然后来一波循环for(int i=0;i<=m;i++)来找到最小伤害mi。

使用 INT_MAX 的话记得加上头文件#include<limits.h>当然你也可以手动输入一个很大的值,去赌它的样例不会比你的大。

上板子(上课讲了个 INT_MAX ,改一下原来的):

  1. int m, p;
  2. cin >> m >> p;
  3. int a[502] = { 0 }, b[502] = { 0 }, c = 0, mi = INT_MAX;// mi 需要有一个初值,不然循环里无法比较。
  4. for (int i = 1;i <= p;i++)
  5. {
  6. cin >> a[i];
  7. }
  8. for (int i = 1;i <= p;i++)
  9. {
  10. cin >> b[i];
  11. }
  12. for (int j = 0;j <= m;j++)
  13. {
  14. for (int i = 1;i <= p;i++)
  15. {
  16. if (a[i] > abs(b[i] - j))
  17. c += (a[i] - abs(b[i] - j));//c 用于记录在 j 位置下受到的伤害的和。
  18. }
  19. mi = min(c, mi);
  20. c = 0;//每次循环结束记得清零!
  21. }
  22. cout << mi << endl;

以上为#题解1的全部内容,后面的难题后面会另外再发一个。祝大家学习快乐!!

制作:BDT20040

2020级cpp机考模拟题A卷-#题解1的更多相关文章

  1. 2020级cpp机考模拟题A卷-#题解2

    这部分的题目都有一定难度,有兴趣的同学可以钻研一下. 特此感谢来自BDT20030  tql的支持. 2:素数的和-2 题意: 计算不大于m的素数之和.(多么容易理解的题目啊,对吧) 题解(有点复杂的 ...

  2. 2020级C++实验课-期末机考模拟考题解

    做这个题解的理由很简单,有很多同学想写但是不会写,凑巧我写了,所以搞个题解. 顺序就是题单里的顺序(界面左上角菜单切换文章,右上角目录方便查看) 1:黑马白马 题意: 随机得到一个数字,如果是偶数,则 ...

  3. 2020级cpp上机考试题解#B卷

    A卷的第七题我只会一个个排除的方法 意思就是暂时没有好办法所以A卷不搞了 1:递归函数求数列 题意: 有一个递归函数int f(int m),计算结果代表了数列的第m项.当m等于1时,函数结果返回1: ...

  4. 【2-SAT】【并查集】NOIp模拟题 植树方案 题解

        一个类似2-SAT的思想,但是简化了很多.只需要用到并查集实现. 题目描述 企鹅国打算种一批树.所谓树,就是由$N$个结点与$N-1$条边连接而成的连通无向图.企鹅国的国王对于这些树有下列要求 ...

  5. BUPT 2012复试机考 4T

    题目描述 我们都学习过计算机网络,知道网络层IP协议数据包的头部格式如下: 其中IHL表示IP头的长度,单位是4字节:总长表示整个数据包的长度,单位是1字节.传输层的TCP协议数据段的头部格式如下:  ...

  6. PMP全真模拟题真题試題含答案解析 2019年下半年PMP考試适用 PMP中文文对照试题 【香港台灣地區PMP考試也可用】

    PMP全真模拟题真题试题 含答案解析 2019年下半年PMP考试适用 PMP中文文对照试题 [香港台灣地區PMP考試也可用]PMP全真模擬題真題試題 含答案解析 2019年下半年PMP考試适用 PMP ...

  7. 更新 | 2019年9月计算机二级office模拟题库

    随着2019年上半年计算机二级考试的完美落幕,紧接着的便是9月份的考试了. 到目前为止,下半年9月份计算机二级考试报名开通时间在6月前后,现在也基本结束. 2019年9月(56次)全国计算机等级考试( ...

  8. 1+X Web前端开发(初级)理论考试样题(附答案)

    传送门 教育部:职业教育将启动"1+X"证书制度改革 职业教育改革1+X证书制度试点启动 1+X成绩/证书查询入口 一.单选题(每题 2 分,共 60 分) 1.在 HTML 中, ...

  9. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

随机推荐

  1. 四、PCB初始化设置

    1.参数设置Setup-Design Parameters 2.显示设置 3.颜色设置(自定义) 4..栅格设置(走线层将25分为5等份)

  2. git生成和添加SSH公钥

    一 .前言: 大家换电脑.换公司的时候,经常要关联本地git和git线上仓库, 在这里我就顺便记一下,好记性不如烂笔头, 以后找起来来方便 二 .查看自己是否生成过公钥,有的话可以直接拿过来用, 也可 ...

  3. Shiro-登陆流程认证-图解

  4. oracle之lsnrctl命令

    采样: [oracle@sh02 ~]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) ...

  5. 【jenkins】04.SSH认证方式拉取Git代码

    首先需要会git ssh 我们一般用http的形式拉取代码. ssh的好处就是不用每次输入密码,而且貌似会快丢丢,不知道是不是错觉. 大概需要三个步骤: 一.本地生成密钥对: 二.设置github上的 ...

  6. [资源] 桃宝上十几块买的C#教程网盘

    我粗略的看了下觉得挺好的,分享给大家 链接:https://pan.baidu.com/s/1iHuLUXde4_L7NB-Zw9JWNg 提取码:1314

  7. Solon 1.6.36 发布,更现代感的应用开发框架

    相对于 Spring Boot 和 Spring Cloud 的项目 启动快 5 - 10 倍 qps 高 2- 3 倍 运行时内存节省 1/3 ~ 1/2 打包可以缩小到 1/2 ~ 1/10(比如 ...

  8. Java学习day15

    File是文件和目录路径名的抽象表示 文件和目录可以通过File封装成对象 对于File而言,封装的不是一个真正存在的文件,只是一个路径名,它可以存在,也可以不存在,要通过后续操作把路径的内容转换为具 ...

  9. gin框架使用【3.路由参数】

    GET url: http://127.0.0.1:8080/users/{id} http://127.0.0.1:8080/users/1   对于id值的获取 package main impo ...

  10. Java语言学习day24--7月30日

    ###17创建子类对象过程的细节 * A 创建子类对象过程的细节 * 如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句还有吗? * 这时是没有的,因为this( ...