ACGO欢乐赛#35-题目解析
2024-12-11 21:32:58
发布于:北京
ACGO欢乐赛#35链接:ACGO欢乐赛#35
趁着刚回家,来写一份题解吧。
虽然今天作业挺多的
这是我第一次写题解,有什么不足也请多多指出,我想拿题解奖
本题解包含注释与讲解,请放心食用
T1:跳转链接
这道题很简单,我们注意到输入的数据,所以我们可以放心大胆的用类型,输出即可
:
#include <bits/stdc++.h>
using namespace std;//预编译指令
int main(){
int A;//声明变量
cin >> A;//输入
cout << A + 114514;//计算并输出
return 0;
}
T2:跳转链接
这道题要求我们求出序列中偶数的数量,本题主要考点就是判断偶数。我们都知道偶数就是可被2整除的数,既一个数就是偶数。将每一个元素都进行检测并记录,所以我们便能得到以下代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int len = 0;//记录序列的长度
cin >> len;
int tc = 0;//对于每个测试样例在线处理
int ans = 0;//记录答案
for (int i = 1;i <= len;i ++){
cin >> tc;
if(tc % 2 == 0){//检测偶数
ans ++;//是偶数就记录
}
}
cout << ans << endl;
return 0;
}
T3:跳转链接
这道题让我们求出一个数中的个数,关键知识点是数位分离:
数位分离就是将每一位上的数字都求出来,每一次将这个数求出个位,再,去除个位,直到除到为止,对于输入数据的每个数位的数字进行检测,并记录
:
#include <bits/stdc++.h>
using namespace std;
int main(){
int ans = 0;//记录答案
int n;
cin >> n;
while(n > 0){//除到0就结束
if(n % 10 == 6){//如果个位是6
ans ++;
}
n /= 10;//去除各位
}
cout << ans << endl;
return 0;
}
T4:跳转链接
这道题让我们判断这个矩阵是不是“下三角”矩阵,就是对角线上的元素都为0的矩阵。
对于一个边长为的矩阵,主对角线上的元素就是
只需要判断一下即可:
:
#include <bits/stdc++.h>
using namespace std;
int main(){
int arr[1200][1200] = {0};//存放矩阵
int n;
cin >> n;
for (int i = 1;i <= n;i ++){
for (int j = 1;j <= n;j ++){
cin >> arr[i][j];// 循环输入
}
}
for (int i = 1;i <= n;i ++){
if(arr[i-1][i] != 0){//判断上一行是否为0
cout << "NO";//输出NO
return 0;
}
}
cout << "YES";//输出YES
return 0;
}
T5:跳转链接
这道题让我们输出一个字符串的个字符,输入一个字符串,循环输出即可,但是要注意字符串下标从开始。
:
#include <bits/stdc++.h>
using namespace std;
int main(){
string str;
cin >> str;
int a,b;
cin >> a >> b;
for (int i = a - 1;i < b;i ++){
cout << str[i];
}
return 0;
}
T6:跳转链接
这道题输入一个十进制数,将他转为8进制数,再按16进制数转化为10进制数,再输出:
思路:
八进制:将这个数数位分离(除取余,逆序排列)
十六进制:数位分离,第位数让结果增加
#include <bits/stdc++.h>
using namespace std;
int eight(int n){
int res[1000] = {};//记录下来每一位
int rec = 0;
while(n > 0){//除到0为止
rec ++;//位数增加
res[rec] = n % 8;//除8取余
n /= 8;//除以8
}
int ans = 0;//结果
for (int i = rec;i >= 1;i --){//逆序排列
ans *= 10;//在结果后面再开一位
ans += res[i];//加上这一位
}
return ans;//返回
}
int sixteen(int n){
int ans = 0;
int i = 0;
while(n > 0){//数位分离
ans += (n % 10) * pow(16,i);//转化为16进制
n /= 10;//去掉最后一位
i ++;//权数增加
}
return ans;
}
int main(){
int n;
cin >> n;
cout << sixteen(eight(n));//函数调用
return 0;
}
感谢您的观看,下次比赛再见!
点赞与关注是我创作的最大动力!!!
全部评论 1
T6 直接给出代码来会更好。
2024-12-10 来自 加拿大
1大佬评论
2024-12-10 来自 北京
0
有帮助,赞一个