0%

[蓝桥杯2018初赛]第几个幸运数

阅读全文 »

[蓝桥杯2017初赛]日期问题

阅读全文 »

[蓝桥杯2017初赛]分巧克力

阅读全文 »

[蓝桥杯2017初赛]Excel地址

题目描述
Excel单元格的地址表示很有趣,它使用字母来表示列号。
比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,….
当然Excel的最大列号是有限度的,所以转换起来不难。
如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?
本题目既是要求对输入的数字, 输出其对应的Excel地址表示方式。

输入
输入存在多组测试数据,对于每组测试数据输入一行包含一个整数
输入的整数范围[1,2147483647]

输出
对于每组测试数据:输出一行表示答案

样例输入
26
2054

样例输出
Z
BZZ

思路:进制转换

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
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll a;
vector<int> vec;
int main(){
scanf("%lld",&a);
stack <int> sta;
while(a){
int tmp=a%26;
if(tmp==0){
tmp=26;
a--;
}
sta.push(tmp);
a/=26;
}
while(sta.size()){
int tmp=sta.top();
sta.pop();
printf("%c",'@'+tmp);
}

}

[蓝桥杯2017初赛]算式900

题目描述
小明的作业本上有道思考题:算式: (□□□□-□□□□)□□=900
其中的小方块代表0~9的数字,这10个方块刚好包含了0~9中的所有数字。
注意:0不能作为某个数字的首位。
小明经过几天的努力,终于做出了答案!如下:(5012-4987)
36=900
用计算机搜索后,发现还有另外一个解,本题的任务就是:请你算出这另外的一个解。

输出
输出格式需要与示例严格一致;
括号及运算符号不要用中文输入法;
整个算式中不能包含空格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int a[10]={0,1,2,3,4,5,6,7,8,9};

int main(){
/*
do{

if(a[0]==0||a[4]==0||a[8]==0){
continue;
}
int aa=a[0]*1000+a[1]*100+a[2]*10+a[3];
int bb=a[4]*1000+a[5]*100+a[6]*10+a[7];
int cc=a[8]*10+a[9];
if((aa-bb)*cc==900){
printf("(%d-%d)*%d\n",aa,bb,cc);
}
}while(next_permutation(a,a+10));*/
cout<< "(6048-5973)*12=900"<<endl;
}

[蓝桥杯2017初赛]k倍区间

题目描述
给定一个长度为N的数列,A1, A2, … AN。
如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。
你能求出数列中总共有多少个K倍区间吗?

输入
第一行包含两个整数N和K。(1 <= N, K <= 100000)
以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)

输出
输出一个整数,代表K倍区间的数目。

样例输入
5 2
1
2
3
4
5

样例输出
6

借鉴:https://blog.csdn.net/w_x_s_h_h/article/details/79375081

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
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX_N=1e5+5;

ll sum=0;

ll a[MAX_N];
ll ans[MAX_N];


int main(){
ll n,k;
cin>>n>>k;

for(int i=1;i<=n;i++){
cin>>a[i];
}

a[1]%=k;

for(int i=2;i<=n;i++){
a[i]=(a[i]+a[i-1])%k;
}

for(int i=1;i<=n;i++){
sum+=(ans[a[i]]++);
}

printf("%lld\n",sum+ans[0]);
return 0;
}

[蓝桥杯2017初赛]青蛙跳杯子

阅读全文 »

[蓝桥杯2017初赛]正则问题

阅读全文 »

[蓝桥杯2017初赛]跳蚱蜢

阅读全文 »

[蓝桥杯2017初赛]购物单

阅读全文 »

[蓝桥杯2017初赛]纸牌三角形

阅读全文 »

[蓝桥杯2017初赛]迷宫

阅读全文 »