2019蓝桥杯国赛C++B组

​ 比赛结束的第二天,坐标HPU,此次的蓝桥杯国赛其实收获挺多的,也是第一次来北京,还是借着公费的理由进行的旅游,哈哈哈,北京三日游很奈斯,本以为会混个国优,空手而归呢,第二天上午官网一查成绩,震惊,还混了个国三,哈哈哈,心想就做出来两个填空题,还能国三,可想蓝桥杯多水了,都说蓝桥杯是暴力杯,啊啊啊,我竟然没想到暴力,不然可能就国二了,甚至国一(国特做梦可以想想),本来一道编程大题,可以暴力打表多混点分呢,时间都浪费在了某坑爹的用dfs跑的填空题上了 ,一直调试还是未果(浪费那么多时间做出来还好嘛,然鹅 汗,15分啊 啊啊啊),心桑啊,不过虽然不是很理想,但对我来说已经很奈斯了.

​ 昨天在北大体育馆举行的颁奖仪式,不过只颁发特等奖,国一二三也不知道有没有奖品,羡慕国特的华为笔记本和华为手机一部(不羡慕,不嫉妒,直接恨)。印象最深的只记得北大欠我两瓶可乐,记心里啦,进场不让带吃的喝的,安检人员说,你出来如果还有,你就拿,没有的话就不拿,我们不负责保管,然而出来去一看,果然啥都没了,啊啊啊,好气哟.不过颁奖典礼体验挺棒的 ,尤其是北大小姐姐们跳到舞蹈,哈哈哈. 奈斯到爆哦,其他不多说了,北京之旅完美谢幕,再见北京!!!

​ 简单说一下题目,每年国赛都是六道,今年十道,大概因为是今年是蓝桥杯十周年吧,具体题目忘了,大致描述一下我会的几题吧

A题: 2019 x y 三个数形成等差数列,问x+y最小值为多少?我觉得这是最水的题了 利用等差数列 两项之差相等就行了代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<bits/stdc++.h>
typedef long long ll;
ll minn = 0x3f3f3f3f;
ll n=10000;
using namespace std;
int main()
{
for(ll i=0;i<=n;i++)//如果怕范围小,可以把n定义大一点
for(ll j=i+1;j<=n;j++)
if(i*i-2019*2019==j*j-i*i)
minn=min(minn,i+j);
printf("%lld\n",minn);
return 0;
}

B题:2019分成若干个两两不相等的质数和,问有多少种符合的分法?

据说是01背包,不会写 跳过,后续会的话再补

D题:应该是 求谁的约数个数等于100,例如S1=1,S2=2,S4=3,S6=4…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int a[10000];
int main()
{
for(int k=1;k<=1000000;k++)
{
int n=k;
int s=1;
a[0]=1;
for(int i=2;i<=k;i++)
if(n%i==0) a[s++]=i;
//打印每个数的约数进行验证
//printf("%d: ",k);
// for(int j=0;j<s;j++)
// printf("%d ",a[j]);
// puts("");
if(s==100)
{
printf("%d\n",k);
break;
}
}
return 0;
}

E题:是5*5的方格从左上角出发沿边走然后回到左上角,问有多少种走法,其中步数不能超过12步,并且同一个边不能走两遍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<bits/stdc++.h>
using namespace std;
int dx[4]={1,0,0,-1},dy[4]={0,1,-1,0};
int vis[10][10];
int a[10][10];
int s=0,ans=0;
int kk,zz;
void dfs(int x,int y)
{
for(int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if( xx>=0&&xx<6&&yy>=0&&yy<6 && !vis[xx][yy] && s<=12){
if(xx!=0||yy!=0) vis[xx][yy]=1;
s++;
if(xx==0 && yy==0){
ans++;
// printf("方案 %d:\n",ans);
// for(int i=0;i<6;i++)
// {
// for(int j=0;j<6;j++)
// {
// printf("%d ",vis[i][j]);
// }
// puts("");
// }
// puts("");
}
dfs(xx,yy);
vis[xx][yy]=0;
s--;
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
//freopen("text.txt","w",stdout);
dfs(0,0);
printf("总方案数:%d\n",ans-2);
return 0;
}

待续。。。

hey!baby,站住,点它!