CSDN 编程竞赛二十六期题解

竞赛总览

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

本次竞赛四道题都不难,适合1-3年的初学者练手。

竞赛题解

题目1、等差数列

一个等差数列是一个能表示成a, a+d, a+2d,..., a+nd(n=0,1,2,3,...)的数列。在这个问题中a是一个非负的整数,d是正整数。现给出三个整数,分别表示等差数列的第一项a、最后一项、公差d,求该数列的和。

两种求解方法,使用程序进行逐项累加求和,或使用等差数列求和公式一键求和。

懒得想等差数列求和公式了,直接使用第一种方法,通过暴力模拟解决此题。 

题目2、阿波罗的魔力宝石

在希腊神话中,有一个神祗阿波罗。阿波罗拥有一枚能够使人变得更加聪明的神奇宝石。但是,这枚宝石的魔力被封印在了一个混乱的顺序中,你需要通过排序的方法才能拥有这枚宝石的魔力。给定一个长度为N的整数数组A,请你将数组A中的元素进行冒泡排序。该题目由CSDN用户【生产队的刘同学】提供。

#include 

int main () {
    int n;
    scanf ("%d", &n);
    int data [n];
    for (int i = 0; i < n; i++) scanf ("%d", &data [i]);
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (data [i] > data [j]) {
                int t = data [i];
                data [i] = data [j];
                data [j] = t;
            }
        }
    }
    return 0;
}

冒泡排序有多种写法,以上写法为其中一种。 

题目3、任务分配问题

小明手头上有n个问题,每个问题都有一个数值,表示这个问题的难度;正好小明团队有n个人,每个人都有一个数值,表示这个人的能力。现在小明要把这n个问题分配给每个人,要求能力更高的人分配到更高难度的问题。

读入问题难度和员工能力两个列表。对这两个列表进行降序排序,然后将问题依次分配给对应员工即可。

为了不打乱原始数据顺序,可以建一个index数组,指向员工编号。例如,index[0]=0; index[1]=1; index[2]=2。排序只针对问题难度和index数组进行操作,不更改原始的员工能力数据顺序,根据index指向的值去找对应原始数据即可。

这里还有一个坑:员工能力一致时,排在前面的员工优先领取到更难的问题。降序排序之后,对于能力一致的员工,后出现的员工可能会排在前面。在排序时,需要特别注意这个问题,否则只能通过50%的测试数据。

题目4、单词逆序

对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。给定一个原字符串A,请返回逆序后的字符串。例,输入“It's a dog!”,输出“dog! a It's”。

int main () {
    int i = 0;
    while (std::cin >> str [i++]);
    while (i --> 0) printf ("%s ", str [i].c_str ());
    return 0;
}

这也是一道经典的老题了,之前在其它平台遇到过多次。流输入函数cin有一个特性:读入一段字符串时遇到空格、换行符等空白字符时停止,利用这一特性,可以巧妙地解决此题。

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