目录
第一题
题目链接
题目解析
代码原理
代码编写
本题总结
第二题
题目链接
题目解析
代码原理
代码编写
本题总结
第三题
题目链接
题目解析
代码原理
代码编写
本题总结
第一题
题目链接
题目解析
代码原理
图一
图二
图二中的红色字,请仔细阅读,出了事博主不背锅
代码编写
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int max_len = 530;
struct Date
{
int month, day;
int h,m,s;
}a[max_len];
bool compare(Date a, Date b)
{
if(a.month != b.month) return a.month < b.month;
else if(a.day != b.day) return a.day < b.day;
else if(a.h != b.h) return a.h < b.h;
else if(a.m != b.m) return a.m < b.m;
else return a.s < b.s;
}
int main()
{
string s;
ll ret = 0;
//ll ret;
for(int i = 1; i <= 520; i++)
{
getline(cin,s);
sscanf(s.c_str(),"2022-%d-%d %d:%d:%d\n",&a[i].month,&a[i].day,&a[i].h,&a[i].m,&a[i].s);
}
sort(a + 1, a + 1 + 520, compare);
for(int i = 1; i <= 520 && i + 1 <= 520; i+=2)
{
int stime = a[i].day * 24 * 60 * 60 + a[i].h * 60 * 60 + a[i].m * 60 + a[i].s;
int etime = a[i + 1].day * 24 * 60 * 60 + a[i + 1].h * 60 * 60 + a[i + 1].m * 60 + a[i + 1].s;
ret += etime - stime;
}
cout << ret;
return 0;
}
注意:这个代码出的答案能在蓝桥平台通过,但是代码在蓝桥平台通过不了
本题总结
易出现bug的几个地方
1.
这里的i += 2,写代码过快的时候容易写成i++,因为第一次上班的时间和第二次上班的时间,两者之间隔了一个第一次下班时间,因此是i += 2
2.初始化的重要性
要是你想少出点bug,那你必须初始化,千万不要相信某些老师说的初始化不重要,初始化也就多敲两个键,咋滴,你少敲两个键,你会少块儿肉呀。反正哈看自己选择。
第二题
题目链接
0排列字母 - 蓝桥云课
题目解析
代码原理
对于这道题有个很简单的方法:sort容器
那么使用这个容器有个前提:头文件#include <algorithm>
代码编写
由于代码比较简单,但是对于刚学编程的小伙伴来说或许并不简单,因为c语言是无法使用sort的,当然博主也不可能去用c语言给这部分的小伙伴写一遍,因此这里博主给这一部分小伙伴安排一个小的模板,之后的排序部分直接套用即可
sort(起点位置,终点位置);
sort(起点位置,终点位置,函数名); //注意这个函数名并不是你写了一个函数名就可以的, 你还需要再写一个函数哦
eg.sort(数组名, 数组名 + 长度)
使用iostream的头文件,以及使用std库,那么剩余的部分使用c语言即可
本题总结
sort容器的头文件:<algorithm>
sort(起点位置,终点位置);
sort(起点位置,终点位置,函数名);
第三题
题目链接
0数位排序 - 蓝桥云课
题目解析
代码原理
略
代码编写
#include<iostream>
#include<bits/stdc++.h>
#include<algorithm>
#include<vector>;
typedef long long ll;
const int max_len = 9999;
using namespace std;
int SUM(int num)
{
int sum = 0;
while(num)
{
sum += num % 10;
num /= 10;
}
return sum;
}
bool Compare(int a, int b)
{
int sumA = SUM(a);
int sumB = SUM(b);
if(sumA != sumB) return sumA < sumB;
return a < b;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n >> m;
vector<int> numbers;
for (int i = 1; i <= n; i++) {
numbers.push_back(i);
}
sort(numbers.begin(), numbers.end(), Compare);
cout << numbers[m - 1] << endl;
return 0;
}
本题总结
本道题也是属于排序类的题,但是本题的代码并没有使用sort容器,根据前面的总结,按理说这题也是可以使用sort容器,但是本题因为还要计算数位和,再根据数位和比较两个数的大小,因此用sort会出现很多不必要的麻烦,注意我们在比赛的过程中可能会因为各种因素而导致自己思路越来越乱,原本你对这题是有思路到最后都会变成无思路,并且我们是为了解决问题,而不是炫技,因此只要能够解题即可。
本篇文章的讲解就先到这里,我们下篇文章再见!