1.P8706 [蓝桥杯 2020 省 AB1] 解码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:输入字符串,里面包含字母和数字,这个数字表示字母有几个,但数字最多不能超过9.要求输出所有字母。
#include
using namespace std;
int main(){
string s; cin>>s;
for(int i=0;i'0'&&s[i]<='9'){
for(int j=0;j
2.P8717 [蓝桥杯 2020 省 AB2] 成绩分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:计算这次考试的最高分、最低分和平均分。
#include
using namespace std;
int main(){
int n; cin>>n;
int a[n];
int maxn=-1,minn=101,sum=0;
for(int i=0;i>a[i];
maxn=max(maxn,a[i]);
minn=min(minn,a[i]);
sum+=a[i];
}
double ans = sum*1.0/n*1.0;
cout<
3.P8711 [蓝桥杯 2020 省 B1] 整除序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,输出这个序列中值为正数的项。
#include
using namespace std;
typedef long long ll;
int main(){
ll n;
cin>>n;
while(n>0){
cout<
4.P8722 [蓝桥杯 2020 省 AB3] 日期识别 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:输入一段字符串,输出它表达的日期。
#include
#include
using namespace std;
int main(void){
string str = "JanFebMarAprMayJunJulAugSepOctNovDec";
int len = (int)str.size();
string s;
string str1 ="0";
while(cin>>s){
int count =0;
for(int i = 0;i
5.P8716 [蓝桥杯 2020 省 AB2] 回文日期 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:输入一个回文日期,输入它后面两个回文日期。abcddcba式
#include
using namespace std;
int main(){
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int n;
cin>>n;
string s=to_string(n);
int y=n/10000;
int m=n/100%100;
int d=(s[6]-'0')*10+s[7]-'0';
if(y%4==0&&y%100!=0||y%400==0)month[2]=29;
if(d+1>month[m]){
d=1;
m=(m+1)%12;
}
else d+=1;
//用来标记是否找到回文日期和ABABBABA型的回文日期
bool flag1=false,flag2=false;
int ans1,ans2;
while(1){
if(flag1&&flag2)break;//找到跳出循环
//天数加一
if(y%4==0&&y%100!=0||y%400==0)month[2]=29;
else month[2]=28;
d++;
if(d>month[m]){
d=1;
m++;
if(m>12){
m=1;
y++;
}
}
//判断
string s=to_string(y);
reverse(s.begin(),s.end());
int mon=(s[0]-'0')*10+s[1]-'0';
int day=(s[2]-'0')*10+s[3]-'0';
if(mon==m&&day==d){
if(!flag1){
flag1=true;
ans1=y*10000+m*100+d;
}
if(d==m){
flag2=true;
ans2=y*10000+m*100+d;
}
}
}
cout<
6.P8720 [蓝桥杯 2020 省 B2] 平面切分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:平面上有 N 条直线,其中第 i 条直线是 y = Ai x + Bi ,计算这些直线将平面分成了几个部分。
分析:x条直线将平面分成sum个部分,加入第i条直线sum增加个数=第i条直线与前i-1条直线交点个数+1。
#include
using namespace std;
const int N = 1005;
int main()
{
int n;
scanf("%d", &n);
int a, b;
long double A[N], B[N];
pair p;
set > s; //利用set自动去重功能筛选掉重边
for(int i = 0; i < n; i++)
{
scanf("%d %d", &a, &b);
p.first = a;
p.second = b;
s.insert(p);
}
int i = 0; //将去重后的直线数据放回A,B数组
for(set >::iterator it = s.begin(); it != s.end(); it++, i++)
{
A[i] = it -> first;
B[i] = it -> second;
}
long long ans = 2; //初始情况当只有一条直线时,有两个平面
for(int i = 1; i < s.size(); i++) //从下标1开始,也就是第二条直线
{
set > pos; //记录第i条直线与先前的交点
for(int j = i-1; j >= 0; j--)
{
int a1 = A[i], b1 = B[i];
int a2 = A[j], b2 = B[j];
if(a1 == a2) //遇到平行线无交点,跳出
continue;
p.first = 1.0*(b2-b1)/(a1-a2);
p.second = 1.0*a1*((b2-b1)/(a1-a2)) + b1;
pos.insert(p);
}
ans += pos.size() + 1;
printf("%d\n", ans);
return 0;
}
7.P8707 [蓝桥杯 2020 省 AB1] 走方格 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:在平面上有一些二维的点阵,从上到下依次为第 1 至第n 行,从左到右依次为第 1 至第 m列,现在有个人站在第 1 行第 1 列,要走到第n行第m列,只能向右或者向下走,输出有几种走法
#include
using namespace std;
const int N = 35;
int dp[N][N];
int n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)dp[i][1]=1;
for(int j=1;j<=m;j++)dp[1][j]=1;
for(int i=2;i<=n;i++)
{
for(int j=2;j<=m;j++)
{
if(i%2==0&&j%2==0)dp[i][j]=0;
else dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
cout<
8.P8723 [蓝桥杯 2020 省 AB3] 乘法表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:输入数字n,并输出转化为n进制的n行乘法表
#include
#include
using namespace std;
int P;
char w[36];
string change(int n)
{
string s;
while(n)
{
s += w[n % P];
n /= P;
}
reverse(s.begin(), s.end());//颠倒顺序
return s;
}
int main()
{
cin >> P;
for (int i = 0; i <= 9; i ++) w[i] = (char)('0' + i);
for (int i = 10; i <= 35; i ++) w[i] = (char)('A' + i - 10);
for (int i = 1; i < P; i ++)
{
for (int j = 1; j <= i; j ++) cout << w[i] << '*' << w[j] << '=' << change(i * j) << ' ';
cout << endl;
}
return 0;
}