欢乐赛#55题解
2025-09-01 16:37:16
发布于:浙江
T1 奇偶判断
这一题就是输入输出然后公式,接着用%来判断奇偶。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long a,b,c;
cin>>a>>b>>c;
cout<<(abs(a*b-c)%2==1?"Yes":"No");//四则运算
return 0;
}
T2 小明和神秘宝箱
定义两个数组,分别记录两个总和,或者直接用变量
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<long long>l(n);
vector<long long>r(n);
for(int i = 1;i <= n;i++){
int x,y;
cin>>x>>y;
//累加
l[i]=l[i-1]+x;
r[i]=r[i-1]+y;
}
cout<<l[n]<<" "<<r[n];
}
T3 找出卧底
我的建议是先定义一个字符串,为“WOHEYEZHI",然后逐字判断,若有偏差,变为false,最后判断就行了。
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,sum = 0;
cin >> n;
//目标字符串
string target = "WOHEYEZHI";
for (int i = 1; i <= n; i++) {
string s;
cin>>s;
//长度不一,continue
if (s.size()!=9) continue;
bool flag = true;
for (int j = 0; j < s.length(); j++) {
//若有一个不一样,变为false
if (toupper(s[j])!=target[j]) {
flag = false;
break;
}
}
//flag是true,卧底的数量++
if (flag)sum++;
}
//输出结果
cout<<sum<<endl;
return 0;
}
T4 寻找最小公倍数
这一题很简单,先用gcd函数求出gcd(a,b)的最大公约数,再用(a*b)/gcd(a,b)算出结果,更新最大值。
代码:
#include<bits/stdc++.h>
using namespace std;
//使用辗转相除法计算最大公约数
int gcd(int a,int b){
if(a%b==0) return b;
return gcd(b,a%b);
}
int main() {
int n,maxn=0;
cin>>n;
vector<int>a(n);
//输入
for(int i = 1;i <= n;i++)cin>>a[i];
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
//套最小公倍数的公式,如果币最大值大,更新最大值
if((a[i]*a[j])/(gcd(a[i],a[j]))>maxn)maxn=(a[i]*a[j])/(gcd(a[i],a[j]));
}
}
//输出结果
cout<<maxn;
return 0;
}
T5 对称矩阵
这一题只需要求出上下的对边与map[i][j]是否相同,不相同便不是。
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t > 0) {
int n;
cin >> n;
// 创建二维向量存储矩阵元素
vector<vector<int>> a(n, vector<int>(n));
// 输入矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
bool flag = true; // 标记矩阵是否满足条件,初始为true
// 检查矩阵中每个元素是否满足条件
for (int i = 0; i < n && flag; i++) { // 若flag为false则结束循环
for (int j = 0; j < n && flag; j++) {
// 检查当前元素是否与水平对称位置(同一行,对称列)元素相等
if (a[i][j] != a[i][n-1-j]) flag = false;
// 检查当前元素是否与垂直对称位置(对称行,同一列)元素相等
if (a[i][j] != a[n-1-i][j]) flag = false;
}
}
// 输出结果,满足输出YES,否则NO
cout << (flag == true ? "YES" : "NO") << endl;
t--;
}
return 0;
}
T6 宝石项链
这一题直接枚举,不过用二分优化
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; cin >> n; // 读元素个数n
vector<int> ys(n); // 存原始元素
for (int i = 0; i < n; i++) cin >> ys[i];
vector<int> usy = ys; // 复制ys用于去重
sort(usy.begin(), usy.end()); // 排序(去重前提)
usy.erase(unique(usy.begin(), usy.end()), usy.end()); // 去重
int cc = usy.size(); // 去重后元素个数
vector<int> xs(cc, 0); // 存每个去重元素的异或结果
for (int i = 0; i < n; i++) {
// 二分找当前元素在usy中的位置
int p = lower_bound(usy.begin(), usy.end(), ys[i]) - usy.begin();
xs[p] ^= (i + 1);
}
long long mlz = 0;
for (int i = 0; i < cc; i++) // 计算“元素×异或值”总和
mlz += (long long)usy[i] * xs[i];
cout << mlz << endl;
return 0;
}
点个赞吧,哦对了,团队:链接描述
这里空空如也
有帮助,赞一个