试题 A: 跑步训练
口算:
蓝桥杯前面的题,切记:戒骄戒躁,用程序写一定要把所有细节全考虑到
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int t = 0 , n = 10000;
while(n > 0)
{
t ++;
if(t & 1)
{
n -= 600;
}
else
{
n += 300;
}
}
n += 600;
t -= 1;
cout<<(t*60+n*0.1/60*60);
return 0;
}
答案:3880
试题 B: 纪念日
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int res = 0;
for(int y = 1921;y <= 2020;y ++)
{
if(y == 1921)
for(int m = 7;m <= 12;m ++)
if(m == 7)
for(int d = 23;d <= days[m];d ++)
res ++;
else
for(int d = 1;d <= days[m];d ++)
res ++;
else if(y == 2020)
for(int m = 1;m <= 7;m ++)
{
int leap = y % 4 == 0 && y % 100 || y % 400 == 0;
int month = m == 2 ? leap + days[m]:days[m];
if(m == 7)
{
res ++;
cout << (res - 1)*24*60<<endl;
return 0;
}
else
for(int d = 1;d <= month;d ++)
res ++;
}
else
for(int m = 1;m <= 12;m ++)
{
int leap = y % 4 == 0 && y % 100 || y % 400 == 0;
int month = m == 2 ? leap + days[m]:days[m];
for(int d = 1;d <= month;d ++)
res ++;
}
}
return 0;
}
答案:52038720
试题E:矩阵
图解:
#include <iostream>
#include <cstring>
#include <algorithm>
#define N 1020
using namespace std;
int f[N][N];
int main()
{
f[0][0] = 1; //两个数字都不放也是一种方案
for(int i = 1;i <= 1010;i ++)
for(int j = 1;j <= 1010 && j <= i;j ++) //条件限制
{
if(i - 1 >= j) //还要判断是否存在
f[i][j] += f[i-1][j]%2020;
if(j)
f[i][j] += f[i][j-1]%2020;
}
cout<<f[1010][1010];
return 0;
}
答案:1340
试题F:整除序列
试题G: 解码
试题H: 走方格
试题 I: 整数拼接
直接看我写的题解:(还带图解)
https://www.acwing.com/solution/content/42129/
试题 J: 网络分析
并查集问题,该题解+详细图解
https://www.acwing.com/solution/content/41922/