CSDN 编程竞赛四十六期题解

竞赛总览

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

竞赛题解

题目1、吃吃吃

已知n个整数,每3个数算一个周期(不足一个周期补0)。在周期的第一个位置的数的权值和等于data [1] + data [4] + …… + data [i + 3t],求三个数的最大权值。如果最大权值为第一个数,输出J;如果最大权值为第二个数,输出H;如果最大权值为第三个数,输出B。

按照题目要求进行求和,得到三个权值,再找到其中的最大值下标。

根据下标,输出字符串JHB对应位置的字符即可。

题目2、n边形划分

已知存在n条边的多边形(n为奇数)。连接多边形所有对角线,能形成多少区域?

这道题目的答案是一个数学公式。使用C++处理时,总是答案错误,推荐使用Python解决。

此题之前出现过一次,如果能记住这个关于n的多项式公式或是其完全展开之后的系数,那么解决起来是很快的。

题目3、求最小元素

假设一个按升序排序的数组在未知的某个中心点旋转,即 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2]。找到数组中最小元素。您可以假设阵列中不存在重复项。

这个题目有很多解法。

方法1:输入所有数据之后排序,直接得到最小的元素、

方法2:先输入第一个元素,默认其为最小元素。再不断输入后续元素,与最小元素进行比较,如果更小的话,更新一下最小元素。

这道题目算是个签到题,是四道题中难度最低的。

题目4、连续子数组的最大和

给定一个整数数组,找到一个具有最大和的连续子数组(子数组最少需要包含一个元素)并输出其最大和。

这道题目属于动态规划系列的练手题。对数据从头开始求和。处理中间的数据时,如果前面的数据累加和为负,就直接抛弃前面的数据(否则会越加越小),这里体现了贪心的思想。都处理完之后,即可得到子数组最大累加和。

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