【CSDN周赛】第46期题解

花无缺

👨‍💻个人主页:@花无缺
欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
本文由 花无缺 原创

本文章收录于专栏 【CSDN周赛】



🌏一、吃吃吃

🌸题目描述

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

输入输出:第一行输入n,第二行输入所有数,输出对应的字符。

🌸题解

解题思路:这个题我看不懂题意,希望懂的大佬在评论区教教我,求求了

题解如下:

// CSDN周赛 46期 NO.1
// 花无缺题解 

#include <iostream>
using namespace std; 

int a[101];

int main() {
	
	int n;
	cin>>n;
	
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	
	int res1=0, res2=0, res3=0;
	
	for(int i=1;i<=n;i++) {
		if(i%3==1){
		  res1+=a[i];
		} else if (i%3==2) {
		  res2+=a[i];
		} else {
		  res3+=a[3];
		}
	}
	
	if (res1>res2) {
		if (res1 > res3) {
		  cout << "J";
		} else {
		  cout << "B";
		}
	} else {
		if(res2>res3){
		  cout << "H";
		}else{
		  cout << "B";
		} 
	}
	return 0;
}

🌏二、n 边形划分

🌸题目描述

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

输入输出:输入一个正整数n,输出能够形成的区域

🌸题解

解题思路:根据递推公式((m-1)*(m-2)*(m*m-3*m+12))/24得出结果

题解如下:

// CSDN周赛 46期 NO.2
// 花无缺题解

#include <iostream>
using namespace std; 
 
 
int solution(int m) {
	
    int result;
	if (m%2==0)
	    result=0;
	else 
		result=((m-1)*(m-2)*(m*m-3*m+12))/24;

    return result;
}
 
 
int main() {
 
    int m;
	cin >> m; 
 
    int result = solution(m);
	cout << result; 
 
    return 0;
}

🌏三、求最小元素

🌸题目描述

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

输入输出:第一行输入数组的个数,第二行输入每一个数组元素,输出最小元素。

🌸题解

解题思路:这个题就是求数组的最小值,借用一个中间变量在输入数组元素的同时直接找出最小值。

题解如下:

// CSDN 46 期周赛 No3
// 花无缺题解

#include <iostream>
#include <algorithm>
using namespace std;

long a[10002];

int main() {
	
	int n;
	cin >> n;
	int temp = 1000000002;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
		if (temp > a[i])
			temp = a[i];
	}
	
	cout << temp;
	return 0;
	
}

🌏四、连续子数组的最大和

🌸题目描述

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和 。

输入输出:第一行输入数组的个数n,第二行输入数组元素,输出连续子数组的最大和。

🌸题解

解题思路:对数组进行二层遍历,找出数组的所有子数组,并求出每一个子数组的和,输出最小的和。

题解如下:

// CSDN 46 期周赛 No.4
// 花无缺题解

#include <iostream>
#include <algorithm>
using namespace std;

int nums[1002];

int main() {
	
	int n, Max = -100000;
	cin >> n;
	
	for (int i = 1; i<=n; i++) {
		cin >> nums[i];
	}
	
	for (int i = 1; i <= n; i++) {
		for (int j = i; j <= n; j++) {
			
			int temp = 0;
			
			for (int k = i; k <= j; k++)
				temp = temp + nums[k];
			
			if (temp >= Max)
			Max = temp;
		}
	}
	
	cout << Max;
	
	return 0;
}

🌸欢迎关注我的博客:@花无缺
持续为你输出有价值的内容~
🥇往期精彩好文:
📢【蓝桥杯省赛感悟】
📢【一文带你了解网页的灰色效果是如何实现的】
你们的点赞👍 收藏⭐ 留言📝 关注✅
是我持续创作,输出优质内容的最大动力!
谢谢!

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值