🌏一、吃吃吃
🌸题目描述
已知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; }