ACGO元旦欢乐赛#37题解
2025-01-08 19:51:51
发布于:北京
这次欢乐赛虽然AK了,但是用了14次提交,实在有点多。
话不多说,直接上题目。
T1: A36447.高精度乘法
这道题的数据范围不超过 long long,但是本人回事图省事,直接用计算器解决一切问题!
#include <bits/stdc++.h>
using namespace std;
int main()
{
cout << "219845122340";
return 0;
}
T2: A36448.数位之和的奇偶
通过观察可以发现,这道题目的数据范围不超过int,直接统计每一位的数字和,最后判断奇偶。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin >> t;
while(t--){
cin >> n;
int cnt = 0;
while(n){
cnt += n%10;
n /= 10;
}
if(cnt%2 == 1) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
T3: A36449.最小公倍数
这道题用常规思路,从2循环到a*b,再判断即可
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
for(int i = 1;i <= a*b;i++){
if(i%a == 0 && i%b == 0){
cout << i;
return 0;
}
}
}
T4:A36450.回文串
这道题简单的不能再简单了,直接输出一个字符串,在逆序输出一下即可。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a;
cin >> a;
cout << a;
for(int i = a.size()-1;i >= 0;i--) cout << a[i];
return 0;
}
T5:A36451.中间的数
这道题还有一点难度.
题目让我们改变中间数的值,问需要几次。
可分为三步
第一步:记录中间的值和下标,然后进行排序
第二步:判断当前中间数的值是否与原来相同。若相同,终止循环。反之中间值+1,继续排序。
第三步:输出循环次数-1的值
#include <bits/stdc++.h>
using namespace std;
int a[1005];
void f(){
memset(a,0,sizeof a);
int n,f = 0;
cin >> n;
for(int i = 1;i <= n;i++)
cin >> a[i];
sort(a+1,a+1+n);
int nn = (n+1)/2;// 中间值下标
int ans = 0; // 结果
int middle = a[nn]; // 最开始中间值
while(f == 0){
if(middle != a[nn]) // 判断是否与原来值相同
f = 1;
else{
a[nn]++;
sort(a+1,a+1+n);
}
ans++;
}
cout << ans-1 << endl;
}
int main()
{
int t;
cin >> t;
while(t--)
f();
return 0;
}
T6:A36452.开关灯游戏
这道题按照题意,每次若灯是奇数,则把附近的四个与自己当前位置取反,最后输出。
#include <bits/stdc++.h>
using namespace std;
int a[5][5];
bool b[5][5];
void f(int aa,int bb){
if(aa >= 1 && aa <= 3 && bb >= 1 && bb <= 3){
if(b[aa][bb] == true) b[aa][bb] = false;
else b[aa][bb] = true;
}
else return;
//cout << aa << " " << bb << " " << b[aa][bb] << "\n";
}
int main()
{
for(int i = 1;i <= 3;i++)
for(int j = 1;j <= 3;j++)
cin >> a[i][j];
for(int i = 1;i <= 3;i++){
for(int j = 1;j <= 3;j++){
a[i][j] %= 2;
if(a[i][j] == 1){
f(i,j);
f(i-1,j);
f(i+1,j);
f(i,j-1);
f(i,j+1);
}
}
}
for(int i = 1;i <= 3;i++){
for(int j = 1;j <= 3;j++)
cout << !b[i][j];
cout << endl;
}
return 0;
}
这是今年第一次欢乐赛。
大家新年快乐!!!
这里空空如也
有帮助,赞一个