蓝桥杯

[蓝桥杯][算法提高]素数求和

╄→гoц情女王★ 提交于 2020-01-20 18:26:28
问题描述 Description 输入一个自然数n,求小于等于n的素数之和 Input 一个自然数n (2 ≤ n ≤ 2,000,000) Output 输出小于等于n的素数之和 Sample Input 2 Sample Output 2 问题思路 简单版[超时] 首先先判断这个数是不是质数,如果是质数就加上 中等版[通过] 题目中需要判断的范围最大是:2000000,所以,我们可以先使用暴力法,算出前 n \sqrt{n} n ​ 前个质数来,所有在判断质数的时候,我们进行模运算的范围是: 2- n \sqrt{n} n ​ 之间的质数就可以了。 代码实现 # include <iostream> # include <cmath> using namespace std ; //sqrt(n)以内的素数 int prime100 [ ] = { 2 , 3 , 4 , 5 , 6 , 7 , 8 , 10 , 11 , 13 , 14 , 16 , 17 , 19 , 20 , 22 , 23 , 26 , 28 , 29 , 31 , 32 , 34 , 37 , 38 , 41 , 43 , 44 , 46 , 47 , 52 , 53 , 58 , 59 , 61 , 62 , 64 , 67 , 68 , 71 , 73 , 74 , 76 , 79 , 82 ,

蓝桥杯2015-省赛-C/C++-A组4题

天涯浪子 提交于 2020-01-19 18:35:11
题目 格子中输出 StringInGrid函数会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两个方向上都居中。 如果字符串太长,就截断。 如果不能恰好居中,可以稍稍偏左或者偏上一点。 下面的程序实现这个逻辑,请填写划线部分缺少的代码。 #include <stdio.h> #include <string.h> void StringInGrid(int width, int height, const char* s) { int i,k; char buf[1000]; strcpy(buf, s); if(strlen(s)>width-2) buf[width-2]=0; printf("+"); for(i=0;i<width-2;i++) printf("-"); printf("+\n"); for(k=1; k<(height-1)/2;k++){ printf("|"); for(i=0;i<width-2;i++) printf(" "); printf("|\n"); } printf("|"); printf("%*s%s%*s",_____________________________________________); //填空 printf("|\n"); for(k=(height-1)/2+1; k<height-1; k++

蓝桥杯2015-省赛-C/C++-A组1题

喜你入骨 提交于 2020-01-19 17:57:12
题目 方程整数解 方程: a^2 + b^2 + c^2 = 1000 (或参见【图1.jpg】) 这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解。 你能算出另一组合适的解吗? 请填写该解中最小的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 代码 1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 int main(){ 5 int a,b,c; 6 for(a=1;a<1000;a++){ 7 for(b=1;b<1000;b++){ 8 for(c=1;c<1000;c++) 9 { 10 if(a*a+b*b+c*c==1000) 11 { 12 cout<<"a:"<<a<<" b:"<<b<<" c:"<<c<<endl; 13 } 14 } 15 } 16 } 17 /* 18 a:6 b:8 c:30 19 a:6 b:30 c:8 20 a:8 b:6 c:30 21 a:8 b:30 c:6 22 a:10 b:18 c:24 23 a:10 b:24 c:18 24 a:18 b:10 c:24 25 a:18 b:24 c:10 26 a:24 b:10 c:18 27 a:24 b:18 c:10 28 a:30 b:6 c:8 29 a

蓝桥杯 历届试题 小朋友排队

人盡茶涼 提交于 2020-01-19 09:18:33
历届试题 小朋友排队 时间限制:1.0s 内存限制:256.0MB 问题描述   n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。   每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。   如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。   请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。   如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。 输入格式   输入的第一行包含一个整数n,表示小朋友的个数。   第二行包含 n 个整数 H1 H2 … Hn,分别表示每个小朋友的身高。 输出格式   输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。 样例输入 3 3 2 1 样例输出 9 样例说明   首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。 数据规模和约定   对于10%的数据, 1<=n<=10;   对于30%的数据, 1<=n<=1000;   对于50%的数据, 1<=n<=10000;   对于100%的数据,1<=n<=100000,0<

蓝桥杯-历届试题 小朋友排队 (树状数组)

。_饼干妹妹 提交于 2020-01-19 09:18:09
历届试题 小朋友排队 时间限制:1.0s 内存限制:256.0MB 问题描述   n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。   每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。   如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。   请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。   如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。 输入格式   输入的第一行包含一个整数n,表示小朋友的个数。   第二行包含 n 个整数 H1 H2 … Hn,分别表示每个小朋友的身高。 输出格式   输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。 样例输入 3 3 2 1 样例输出 9 样例说明   首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。 数据规模和约定   对于10%的数据, 1<=n<=10;   对于30%的数据, 1<=n<=1000;   对于50%的数据, 1<=n<=10000;   对于100%的数据,1<=n<=100000,0<

[蓝桥杯]幸运数

自作多情 提交于 2020-01-18 23:35:09
https://blog.csdn.net/update7/article/details/68951980 //THIS CODE NOT WORKS #include<bits/stdc++.h> #define ls o<<1 #define rs o<<1|1 #define MS(x,y) memset(x,y,sizeof(x)) #define MC(x,y) memcpy(x,y,sizeof(x)) typedef long long LL; template<class T> inline void gmax(T &a,T b){if(b>a)a=b;} template<class T> inline void gmin(T &a,T b){if(b<a)a=b;} const int N=1e6+10,M=0,Z=1e9+7,W=13,L=2e6; const double eps=1e-10; const int dy[4]={-1,0,0,1},dx[4]={0,-1,1,0}; using namespace std; int casenum,casei; int id; int n,m; int a[N]; void dfs(int pre){ if(a[pre]>=n) return; int cnt=pre; for(int i=pre;i<=n

寒假Day5:蓝桥杯模拟赛

与世无争的帅哥 提交于 2020-01-18 22:09:42
蓝桥杯B组模拟赛 计蒜客的一个蓝桥杯B组模拟赛 比赛链接: https://www.jisuanke.com/contest/6516?view=challenges 比完后,这么菜的么。。。。 TO DO LIST w 50 + 蓝桥杯B组模拟赛1-5 10t 来源: https://www.cnblogs.com/OFSHK/p/12210417.html

蓝桥杯 历届试题 对局匹配(dp)

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-18 19:44:05
问题描述   小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。   小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。   现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, A2, ... AN。   小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任意两名用户积分差不等于K)? 输入格式   第一行包含两个个整数N和K。   第二行包含N个整数A1, A2, ... AN。   对于30%的数据,1 <= N <= 10   对于100%的数据,1 <= N <= 100000, 0 <= Ai <= 100000, 0 <= K <= 100000 输出格式   一个整数,代表答案。 样例输入 10 0 1 4 2 8 5 7 1 4 2 8 样例输出 6 思路: 用一个标记数组记录每个数字共有几个。 1、如果k等于0,则答案为出现数字的种类数。 2、如果k不为0,动归处理。 相差为k的倍数的数之间才会互相影响,也就是说对k同余的数之间。对k取余可得到0—k-1,k组,分别对每一组组内进行最优取数,再把k个组的结果加起来,就是最后答案。 对于一个数j,要么不取j-k,取j和j-k-k;要么不取j和j-k-k

蓝桥杯----基础练习 Huffuman树

有些话、适合烂在心里 提交于 2020-01-18 01:36:40
备战蓝桥杯中,做练习的时候想着写一下博客记录一下自己的思路 有些思路可能不太好,有路过的大神请指点一下 问题描述   Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。   给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:   1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。   2. 重复步骤1,直到{pi}中只剩下一个数。   在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。   本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。 例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:   1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。   2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。   3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。

【蓝桥杯训练】第一天1251

旧街凉风 提交于 2020-01-17 23:45:54
1251 [蓝桥杯2015初赛]星系炸弹 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,a年b月c日放置,定时为n天,请你计算它爆炸的准确日期。 输入 输入存在多组数据,每组数据输入一行,每一行输入四个正整数a,b,c,n 输入保证日期在1000-01-01到2020-01-01之间,且日期合法。 n不超过1000 输出 请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19 请严格按照格式书写。不能出现其它文字或符号。 样例输入 Copy 2015 1 1 15 2014 11 9 1000 样例输出 Copy 2015-01-16 2017-08-05 提示 题目已改编。 注意 理清头绪,用笔和纸去画一画 善于创建可复用的函数函数 闰年为:四年一闰,两百年不闰,四百年闰 算法 python v1.0: 按照月份处理 创建isLeap(),用于判断闰年 创建T(),通过参数,m、y确定当月天数 python v2.0、C++ v1.0: 模拟计时器,循环加一计时,时间复杂度O(n),取决于n C++ 中注意使用printf("%02d",d)来控制输出 能够说明的是