CSDN 编程竞赛二十八期题解

竞赛总览

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

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

竞赛题解

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

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

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);
    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送到逃生装置上,方能逃离隧道,请你帮帮小海豚,告诉它至少要操作多少次,才能通关。

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++;
    }
    return 0;
}

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

题目4、收件邮箱

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

解决此题需要四个步骤。

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

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

3、替换dot符号。

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

使用string类提供的find函数(寻找文本,返回文本第一次出现的位置索引,未找到返回-1)、substr函数(取文本中间,参数一为起始位置索引,参数二为欲取出的字符数量),即可解决这道题目。

你可能感兴趣的:(CSDN,竞赛题解,算法,c++)