# 官方题解|欢乐赛#43
2025-03-19 13:20:19
发布于:浙江
官方题解|欢乐赛#43
T1
思路分析
本题主要考察分支结构,只要按照题目要求用if-else
语句把所以情况列清楚即可。
代码分析
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
if(n <= 100) n = n;
else if(n <= 200){
n -= 10;
}else if(n <= 300){
n -= 20;
}else{
n -= 50;
}
cout << n;
return 0;
}
T2
思路分析
本题考查一维数组,只需要先把 个数存储起来,然后按照题目要求交换下标为 和 的元素即可。交换可以新开一个变量进行交换,也可以利用C++的swap
函数进行交换。
代码分析
#include <bits/stdc++.h>
using namespace std;
int a[1010], b, c, n;
int main(){
cin >> n >> b >> c;
for(int i = 1; i <= n; i ++ ){//读入
cin >> a[i];
}
swap(a[b], a[c]);//交换元素
for(int i = 1; i <= n; i ++ ){//输出
cout << a[i] << ' ';
}
return 0;
}
T3
思路分析
本题考查二维数组的存储,之前考过类似的题目。可以先把整个二维数组的和先算出来,然后再把角落的几个元素减掉,也可以在进行加的时候直接把角落的元素去掉。注意要开long long
。
代码分析
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N][N], n;
long long sum = 0;
int main(){
cin >> n;
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
cin >> a[i][j];
if(i == 1 && j == n) continue;
if(i == 1 && j == 1) continue;
if(i == n && j == 1) continue;
if(i == n && j == n) continue;
sum += a[i][j];
}
}
cout << sum;
return 0;
}
T4
本题考查嵌套循环,外层循环枚举区间,内层循环还是中规中矩的数位求和,中途统计一下合法的数字个数即可。
代码分析
#include <bits/stdc++.h>
using namespace std;
int main(){
int l, r, k;
cin >> l >> r;
int ans = 0;
cin >> k;
for(int i = l; i <= r; i ++ ){
int x = i, sum = 0;
while(x){
sum += x % 10;
x /= 10;
}
if(sum == k) ans ++;
}
cout << ans;
}
T5
思路分析
本题主要考察枚举,你先要找到M
的位置 ,然后在 前面去找有多少 K
,在 后面有多少 ,最后利用排列组合乘法原理求出答案。
代码分析
#include <bits/stdc++.h>
using namespace std;
int main(){
int k = 0, m = 0, p = 0;
string s;
cin >> s;
int n = s.size();
for(int i = 0; i < n; i ++ ){
if(s[i] == 'M') m = i;
}
for(int i = 0; i < m; i ++ ) k += s[i] == 'K';
for(int i = m + 1; i < n; i ++ ) p += s[i] == 'P';
cout << k * p;
return 0;
}
T6
思路分析
本题主要考察质数判断。可以考虑倒着枚举,找到第一个质数,判断质数的时候,记得算到根号 的时候即可,枚举到 会部分测试点超时。
#include <bits/stdc++.h>
using namespace std;
bool is_prime(int x){
for(int i = 2; i * i <= x; i ++ ){
if(x % i == 0) return false;
}
return true;
}
void solve(){
int n;
cin >> n;
for(int i = n - 1; i >= 2; i -- ){
if(is_prime(i)){
cout << i << endl;
return;
}
}
}
int main(){
int t;
cin >> t;
while(t-- ){
solve();
}
}
这里空空如也
有帮助,赞一个