当前位置: 首页 > news >正文

CSDN 编程竞赛二十八期题解

竞赛总览

CSDN 编程竞赛二十八期:比赛详情 (csdn.net)

本期竞赛的题目都很简单,但是非常考验读题和编码速度。这一次没有遇到bug,竞赛体验较好。

竞赛题解

题目1、小Q的鲜榨柠檬汁

团建活动是大家所想要的。小Q给大家准备了鲜橙汁。现在有n个朋友买回了k瓶饮料,每瓶有l毫升的饮料,同时还买回了c个柠檬,每个柠檬可以切成d片,p克盐。已知每个朋友需要nl毫升的饮料,一片柠檬,以及np克盐。小Q想知道每个朋友最少可以喝多少杯饮料。

#include <cstdio>int min (int a, int b) {if (a < b) return a;return b;
}int main () {int n, k, l, c, d, p, nl, np;scanf ("%d %d %d %d %d %d %d %d", &n, &k, &l, &c, &d, &p, &nl, &np);int result = k * l / nl / n;result = min (result, c * d / n);result = min (result, p / np / n);printf ("%d", result);return 0;
}

此题看起来很吓人,其实特别水。题目描述略有一点问题。小Q想知道每个朋友最少可以喝多少杯饮料,其实是要计算每个朋友最多能够喝到多少杯饮料,并且要平均分配,这里实际上是在表达一种期望。否则,如果按照其主观意愿,最少一定可以喝到零杯饮料。

首先需要计算出原材料能够配置饮料的份数。

水:k瓶,l毫升,每份饮料需要nl毫升水。一共可以配置k*l/nl份饮料。

柠檬:c个,每个切d片,每份饮料需要1片柠檬。一共可以配置c*d/1份饮料,即c*d份饮料。

盐:p克,每份饮料需要np克盐。一共可以配置p/np份饮料。

实际可以生产的饮料份数为三者中的最小值。

计算出总份数之后,将饮料平均分给所有人饮用,向下取整,即可得到最终答案。

题目2、三而竭

一鼓作气再而衰三而竭。小艺总是喜欢把任务分开做。小艺接到一个任务,任务的总任务量是n。第一天小艺能完成x份任务。第二天能完成x/k,第t天能完成x/(k^(t-1))。小艺想知道自己第一天至少完成多少才能完成最后的任务。

题目的输入为n和k。

直接以第一天能完成x份任务为基准,计算k天能完成的总任务量。

int calc (int x, int k) {int result = 0;while (x > 0) {result += x;x /= k;}return result;
}

如果这个总任务量达到n,说明能够完成任务。

当然,如果第一天直接完成n份任务,最终一定能够完成任务。

所以,答案在1到n之间。既要完成任务,又要使得x尽可能小,正确答案需要同时满足这两点。

题目3、隧道逃生

小海豚喜欢打游戏,现在它在操纵游戏人物小C逃脱废弃的隧道,逃生装置在小C的前方X米远的位置。但是游戏机只有两个按钮:前进和后退。按前进,小C会前进m米;按后退,小C会后退n米。小海豚必须设法把小C送到逃生装置上,方能逃离隧道,请你帮帮小海豚,告诉它至少要操作多少次,才能通关。

#include <cstdio>int main () {int x, m, n;scanf ("%d %d %d", &x, &m, &n);int pos = 0, t = 0;while (pos != x) {if (pos < x) pos = pos + m;else if (pos > x) pos = pos - n;else break;t++;}printf ("%d", t);return 0;
}

用一个变量记录当前角色所在位置。当前位置小于终点位置时,前进;当前位置大于终点位置时,后退。记录操作次数,暴力模拟即可。

题目4、收件邮箱

已知字符串str表示邮箱的不标准格式。其中”.”会被记录成”dot”,”@”记录成”at”。写一个程序将str转化成可用的邮箱格式。可用格式中,字符串除了开头结尾所有”dot”,都会被转换;”at”只会被转化一次,开头结尾的不转化。

#include <cstdio>
#include <iostream>
#include <string>int main () {std::string str;std::cin >> str;int pos;pos = str.find ("at", 1);str = str.substr (0, pos) + "@" + str.substr (pos + 2, str.length () - pos - 2);int start = 0, end = 0;if (str.substr (0, 2) == "at") {str = str.substr (2, str.length () - 2);start = 1;} else if (str.substr (0, 3) == "dot") {str = str.substr (3, str.length () - 3);start = 2;}if (str.substr (str.length () - 2, 2) == "at") {str = str.substr (0, str.length () - 2);end = 1;} else if (str.substr (str.length () - 3, 3) == "dot") {str = str.substr (0, str.length () - 3);end = 2;}pos = str.find ("dot");while (pos > -1) {str = str.substr (0, pos) + "." + str.substr (pos + 3, str.length () - pos - 3);pos = str.find ("dot");}if (start == 1) str = "at" + str; else if (start == 2) str = "dot" + str;if (end == 1) str += "at"; else if (end == 2) str += "dot";printf ("%s", str.c_str ());return 0;
}

解决此题需要四个步骤。

1、替换at符号。需要注意的是, 开头结尾的不转化,因此,忽略位置0,从位置1开始寻找at即可。

2、有三种可选的开头类型:at开头、dot开头、其它(结尾类型同理)。判断完成之后,去掉开头结尾的特殊符号。

3、替换dot符号。

4、恢复开头结尾的符号。

http://www.lryc.cn/news/6480.html

相关文章:

  • DML数据操纵语言
  • 【Hello Linux】Linux工具介绍 (gcc/g++ gdb)
  • TeamFiltration:一款针对O365 AAD账号安全的测试框架
  • 你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧
  • 数据结构与算法:7种必须会的排序以及3种非基于比较排序
  • 数据库用户数
  • nginx如何用html显示多个图片并加入播放链接
  • 【蓝桥杯集训·每日一题】Acwing 3729. 改变数组元素
  • springmvc执行流程
  • SpringMVC(2)
  • Jackson序列化json时null转成空串或空对象
  • 如何将Python的上级目录的文件导入?【from.import】
  • Java实现碧蓝航线连续作战
  • Docker笔记
  • 情人节使用AI TOOL来创建一个甜言蜜语的女伴
  • G-GhostNet(IJCV 2022)原理与代码解析
  • Ethercat系列(5)TWcat3激活过程的协议分析(续1)
  • QT入门Input Widgets之QScrollBar
  • 【ML】基于机器学习的心脏病预测研究(附代码和数据集,多层感知机模型)
  • 工序排序问题--约翰逊法精讲
  • WebDAV之葫芦儿·派盘+网盘精灵
  • 计算机网络期末知识点总结
  • 【Vue3 组件封装】vue3 轮播图组件封装
  • 电力国家(行业)标准目录
  • 如何实现倒序输出
  • 遗留系统的自动化测试策略和实践方法
  • 【Android】系统源码下载及编译
  • 基于HTML实现浪漫情人节表白代码(附源代码)
  • PCL 平面拟合——RANSAC
  • 【Linux之Shell脚本实战】监控系统的磁盘空间使用率