江西省建设厅网站,网站建设售价多少钱,缤纷销客crm,北京网站建设找德冿朴竞赛总览
CSDN 编程竞赛二十八期#xff1a;比赛详情 (csdn.net)
本期竞赛的题目都很简单#xff0c;但是非常考验读题和编码速度。这一次没有遇到bug#xff0c;竞赛体验较好。
竞赛题解
题目1、小Q的鲜榨柠檬汁
团建活动是大家所想要的。小Q给大家准备了鲜橙汁。现在…竞赛总览
CSDN 编程竞赛二十八期比赛详情 (csdn.net)
本期竞赛的题目都很简单但是非常考验读题和编码速度。这一次没有遇到bug竞赛体验较好。
竞赛题解
题目1、小Q的鲜榨柠檬汁
团建活动是大家所想要的。小Q给大家准备了鲜橙汁。现在有n个朋友买回了k瓶饮料每瓶有l毫升的饮料同时还买回了c个柠檬每个柠檬可以切成d片p克盐。已知每个朋友需要nl毫升的饮料一片柠檬以及np克盐。小Q想知道每个朋友最少可以喝多少杯饮料。
#include cstdioint 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 cstdioint 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 stringint 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、恢复开头结尾的符号。