最近一直没有在学习。
蓝桥杯侥幸进了决赛,要好好准备一下,不能像省赛时候一样混了。
今天开始好好学习,认真记录一下。
A
5分
B
5分
直接暴力枚举
C
0分
这题答案是977,我写成了978,是因为文件读入的时候,把最后一行的空行也读入了,因此要注意文件写入时候的格式,文件要检查一下是否标准。
本题我的做法就是用excel弄出日期,然后放到文档里文件写入,十分方便。本题主要学习文件读入的写法。
#include<iostream>
using namespace std;
#include<cmath>
#include<iostream>
#include<fstream>
#include<string>
int main()
{
int ans=0;
fstream f("日期.txt");//创建一个fstream文件流对象
string line; //保存读入的每一行
while(getline(f,line))//会自动把\n换行符去掉
{
//读取的值是line
int sum=0;
//cout<<line<<endl;
for(int i=0;i<line.length();i++){
if(line[i]!='/'){
sum+=(line[i]-'0');
}
}
if(sqrt(sum)==(int)sqrt(sum)){
ans++;
}
}
cout<<ans;
return 0;
}
D
0分
不难,但是我没想到用dp做,我以为是用树的知识
/*
一道dp题
*/
#include<iostream>
using namespace std;
const int M=2030;
long long w[M];
int main(){
int n=2021;
w[0]=0;
for(int i=1;i<=n;i++){
w[i]=-1;//初始化,-1表示没有搜到
}
for(int i=1;i<=n;i++){
//左右子节点个数加起来应该是i-1啊
//对于每个节点数i,左侧有m个点,右侧则有i-1-m个点
//设左侧有m个节点
//先初始化一个左侧无节点的情况
w[i]=1+2*w[0]+3*w[i-1]+0;
for(int m=1;m<=i-1;m++){
w[i]=min(w[i],1+2*w[m]+3*w[i-1-m]+m*m*(i-1-m));
}
}
for(int i=1;i<=n;i++)
cout<<w[i]<<endl;
return 0;
}
E
15分
送分题,一定不能丢
#include<iostream>
#include<string.h>
using namespace std;
int main(){
string s;
cin>>s;
for(int i=0;i<s.length();i++){
if(s[i]>='a'&&s[i]<='z'){
s[i]=s[i]+'A'-'a';
}
cout<<s[i];
}
return 0;
}