CSDN第46期竞赛题解

第一题:吃吃吃

题目描述
已知n个整数。
每3个数算一个周期。
不足一个周期补0.
在周期的第一个位置的数的权值和等于a1+a[1+3]+…

求三个数的最大权值。
如果最大权值为第一个数,输出’J’;
最大权值为第二个数,输出’H’;
最大权值为第三个数,输出’B’。

输入描述:

第一行输入一个整数n。(1<=n<=100)
第二行输入n个整数。

输出描述:

输出答案。

输入样例:

4
1 1 1 1

输出样例:

J

题解:

这道题算是比较简单的,基本上学过一两个月的编程语言都能做出来,所以代码我只写函数部分。

sum[3]={0,0,0};//记录三组和

for(int i=0;i<n;i+=3){

sum[0]+=vec[i];

}

for(int j=1;j<n;k+=3){

sum[1]+=vec[j];

}

for(int k=2;k<n;k+=3){

sum[2]+=vec[k];

}

三个循环结束的时候可能不太一样,我写了三个。

接下来只需要寻找一下最大值就可以了。

2:n边形划分

题目描述

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

输入描述:

给定整数n。(1<=n<=1e9)

输出描述:

输出区域数,对1e9+7取模

输入样例:

5

输出样例:

11

题解:

这是一道公式题,只需要将公式(n−1)∗(n−2)∗(n^2−3n+12)/24带入即可,这道题对C的选手很不友好,一开始我也是选择C和C++写的,但是编译报错,只能使用python来过了。由于代码没有什么难度,我这里也不展示了。

3.求最小元素

题目描述:​

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

输入描述:

第一行输入整数n。(1<=n<=10000)表示数组的大小
第二行给出n个整数a.(0<=a<=1e9)

输出描述:

输出答案

输入样例:

5
3 4 5 1 2

输出样例:

1

题解:

这题是入门级别的,完全可以将其“按升序排序的数组在未知的某个中心点旋转”忽略掉,说白了就是一道让你寻找最小值的题,是四道题里最简单的了,所以具体的代码我也不过多叙述了。

4.连续子数组最大和

题目描述:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和 。(测试用例仅做参考,我们会根据代码质量进行评分)

输入描述:

第一行输入整数数组的大小n。(1<=n<=1000)
第二行给出n个整数a。(-1e5<=a<=1e5)

输出描述:

输出答案。

输入样例:

9
-2 1 -3 4 -1 2 1 -5 4

输出样例:

6

题解:

这一题在算法中算是一道比较经典的题目,,在学习分治法和动态规划是都会有所涉及,而本题也有三种解题思路,一种是暴力枚举(时间复杂度O(n^3)),一种是分治法(时间复杂度O(nlogn))还有一种就是动态规划(O(n))。可以看出动态规划是非常快的,具体我也不想过多介绍,因为网上实在太多了,直接上C的代码。

void solution(int n,int* arr ){

int max=0,MAX=0;

for(int i=0;i<n;i++){

MAX+=arr[i];

 if(MAX<arr[i]){

        MAX=arr[i];

}

if(MAX>max){

max=MAX;

}

printf("%d",max);

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值