ACGO元旦欢乐赛#37题解
2025-01-08 13:45:38
发布于:北京
欢乐赛链接:ACGO欢乐赛37
前言:
是以前欢乐赛太水了,导致上来就被坑了
T1:A36447.高精度乘法
这题让我们输出114514×1919810 的结果
只需要用上 long long 就行
#include <bits/stdc++.h>
using namespace std;
int main() {
long long a = 114514;
long long b = 1919810;
cout << a * b;
return 0;
}
给定一个整数 n ,判断其各数位之和的奇偶性
需要把每一位都加起来,然后判断奇偶就行,注意换行和大写
#include <bits/stdc++.h>
using namespace std;
int t;
int main() {
cin >> t;
while(t --){
int n, sum = 0;
cin >> n;
while(n != 0) {
sum += n % 10;
n /= 10;
}
if (sum % 2 == 1) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
T3:A36449.最小公倍数
给你两个数 a 和 b ,求这两个数的最小公倍数
这题可以用最大公约数求最小公倍数
公式为:a × b ÷ 最大公约数
#include <bits/stdc++.h>
using namespace std;
int a, b;
int main() {
cin >> a >> b;
int sum = __gcd(a, b);
cout << a * b / sum;
return 0;
}
T4:A36450.回文串
给定一个字符串 S ,请构造一个新的字符串,形式为:原字符串 S 与其反转后的字符串拼接在一起的结果。
最后输出该新字符串。只需要正着输出一遍,再倒着输出一遍就行
#include <bits/stdc++.h>
using namespace std;
string s;
int main() {
cin >> s;
for (int i = 0; i < s.size(); i ++) cout << s[i];
for (int i = s.size() - 1; i >= 0; i --) cout << s[i];
return 0;
}
T5:A36451.中间的数
这题有点东西,要动点脑子
「中间值」的定义为:对于一个长度为 n 的序列 A ,将数组按非递减顺序排序后得到的新数组 A ′ ,取第
⌈⌉个元素。
我们要先找到中间数,这里是向上取整,然后我们排完序后,看看后面有几个与中间值相等的数,有就让
cnt++ ,最后输出 cnt 就行。
举个例子:
输入:
1
4
1 2 2 2
我们通过给出的定义,也就是 4 / 2 , 向上取整后是 a[2] 是 2 ,后面(包括自己)有 3 个相同的,就输出 3
演示一下:
第一步:1 2 2 3 a[2] = 2
第二步:1 2 3 3 a[2] = 2
第三步:1 3 3 3 a[2] = 3
所以输出 3
#include <bits/stdc++.h>
using namespace std;
int T;
int a[1005];
int main() {
cin >> T;
while (T --) {
int n;
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
int m = ceil(n / 2.0);
int num = a[m];
int cnt = 0;
for (int i = m; i <= n; i ++) {
if (a[i] == num) cnt ++;
}
cout << cnt << endl;
}
return 0;
}
T6:A36452.开关灯游戏
按下任意一个灯会切换它的状态,同时切换与它上下左右相邻灯的状态。
也就是如果当前位置模 2 为 1 的说明切换了状态,那么它的上下左右如果为 1 就输出 0 ,如果为 0 就输出 1
#include <bits/stdc++.h>
using namespace std;
int a[5][5], b[5][5];
int main() {
for (int i = 1; i <= 3; i ++) {
for (int j = 1; j <= 3; j ++) {
cin >> a[i][j];
b[i][j] = 1;
}
}
for (int i = 1; i <= 3; i ++) {
for (int j = 1; j <= 3; j ++) {
if (a[i][j] % 2 == 1) {
if (b[i][j] == 0) {
b[i][j] = 1;
}else b[i][j] = 0;
if (b[i - 1][j] == 0) {
b[i - 1][j] = 1;
}else b[i - 1][j] = 0;
if (b[i + 1][j] == 0) {
b[i + 1][j] = 1;
}else b[i + 1][j] = 0;
if (b[i][j - 1] == 0) {
b[i][j - 1] = 1;
}else b[i][j - 1] = 0;
if (b[i][j + 1] == 0) {
b[i][j + 1] = 1;
}else b[i][j + 1] = 0;
}
}
}
for (int i = 1; i <= 3; i ++) {
for (int j = 1; j <= 3; j ++) {
cout << b[i][j];
}
cout << endl;
}
return 0;
}
以上便是本期ACGO元旦欢乐赛#37全题解的全部内容!
祝愿大家多多 AC ,多多变强,也祝愿 ACGO 的比赛越办越好!
求奖品!!!
全部评论 2
下次发学习讨论里
昨天 来自 北京
0昨天 来自 北京
0
有帮助,赞一个