蓝桥杯

蓝桥杯-基础练习-数列排序

。_饼干妹妹 提交于 2020-02-13 15:11:57
资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述   给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200 输入格式   第一行为一个整数n。   第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。 输出格式   输出一行,按从小到大的顺序输出排序后的数列。 样例输入 5 8 3 6 4 9 样例输出 3 4 6 8 9 # include <stdio.h> # define N 200 int * sort ( int a [ ] , int n ) { int i , j ; for ( i = 1 ; i < n ; i ++ ) for ( j = i + 1 ; j <= n ; j ++ ) { int temp ; if ( a [ i ] > a [ j ] ) { temp = a [ i ] ; a [ i ] = a [ j ] ; a [ j ] = temp ; } } return a ; } int main ( ) { int n , i ; int a [ N ] ; while ( ~ scanf ( "%d" , & n ) ) { for ( i = 1 ; i <= n ; i ++ ) scanf ( "%d" , & a [ i ] ) ; int * b = sort ( a ,

蓝桥杯——算法训练——前缀表达式

时光怂恿深爱的人放手 提交于 2020-02-13 03:34:41
蓝桥杯——算法训练——前缀表达式 —————————————————————————————— 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。 输入格式 输入只有一行,即一个前缀表达式字符串。 输出格式 输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。 样例输入 + 5 2 样例输出 7 —————————————————————————————— 思路分析:这道题其实没什么思路,注意是不大于10的整数,因此做好字符串的转换,以及学会如何输入带空格字符串(这里使用的是 cin.get() )即可,直接看代码: # include <iostream> # include <string> # include <string.h> using namespace std ; int pl ( int a , int b ) { return a + b ; } int mi ( int a , int b ) { return a - b ; }

蓝桥杯:乘积最大II 动态规划解法

混江龙づ霸主 提交于 2020-02-12 00:33:59
蓝桥杯:乘积最大II 动态规划解法 因为数据不大,存在【 暴力解法 】 问题描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当N=3,K=1时会有以下两种分法: 3 * 12=36 31 * 2=62 这时,符合题目要求的结果是:31*2=62 现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。 输入格式 程序的输入共有两行: 第一行共有2个自然数N,K(6≤N≤40,1≤K≤6) 第二行是一个长度为N的数字串。 输出格式 输出所求得的最大乘积(一个自然数)。 样例输入 4 2 1231 样例输出 62 思路 问题: 求解在前 i 个数字中插入 j 个乘号得到的乘积最大值 状态定义: // dp[i][j]表示在前i个数字中插入j个乘号得到的乘积最大值 int dp [ ] [ ] ; 状态转移: 在前i个数中插入j个乘号,问题转换为: 在前k(下标 [1, k

蓝桥杯2018-省赛-C/C++-A组2题

喜欢而已 提交于 2020-02-10 20:42:27
题目 标题:星期一 整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一? (不要告诉我你不知道今天是星期几) 注意:需要提交的只是一个整数,不要填写任何多余的内容或说明文字。 代码 1 /* 2 1901年找不到 3 2000年12月31日为周日,反向求 4 */ 5 #include<iostream> 6 #define ll long long 7 using namespace std; 8 string week[7]={"Sun.","Sat.","Fri.","Thur.","Wen.","Tues.","Mon."}; 9 bool judge(int y){ 10 if((y%400==0)||(y%100!=0&&y%4==0)){ 11 return true; 12 }else 13 return false; 14 } 15 int main(){ 16 int sta=1901; 17 int end=2001; 18 ll day=0; 19 for(int i=sta;i<end;i++){ 20 if(judge(i)){ 21 day+=366; 22 }else{ 23 day+=365; 24 } 25 } 26 cout<<"day:"<<day<<endl; 27 cout<<week[(day-1)%7]

蓝桥杯2018-省赛-C/C++-A组3题

陌路散爱 提交于 2020-02-10 20:37:17
题目 标题:乘积尾零 如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9937 1173 6866 3397 4759 7557 3070 2287 1453 9899 1486 5722 3135 1170 4014 5510 5120 729 2880 9019 2049 698 4582 4346 4427 646 9742 7340 1230 7683 5693 7015 6887 7381 4172 4341 2909 2027 7355 5649 6701 6645 1671 5978 2704 9926 295 3125 3878 6785 2066 4247 4800 1578 6652 4616 1113 6205 3264 2915 3966 5291 2904 1285 2193 1428 2265 8730 9436 7074 689 5510 8243 6114 337 4096 8199 7313 3685 211 注意:需要提交的是一个整数,表示末尾零的个数。不要填写任何多余内容。 代码 1 #include<iostream> 2

蓝桥杯2018-省赛-C/C++-A组6题

孤街醉人 提交于 2020-02-10 20:35:06
题目 标题:航班时间 【问题背景】 小h前往美国参加了蓝桥杯国际赛。小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。 小h对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有12小时时差,故飞机总共需要14小时的飞行时间。 不久后小h的女朋友去中东交换。小h并不知道中东与北京的时差。但是小h得到了女朋友来回航班的起降时间。小h想知道女朋友的航班飞行时间是多少。 【问题描述】 对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。 【输入格式】 从标准输入读入数据。 一个输入包含多组数据。 输入第一行为一个正整数T,表示输入数据组数。 每组数据包含两行,第一行为去程的 起降 时间,第二行为回程的 起降 时间。 起降时间的格式如下 h1:m1:s1 h2:m2:s2 或 h1:m1:s1 h3:m3:s3 (+1) 或 h1:m1:s1 h4:m4:s4 (+2) 表示该航班在当地时间h1时m1分s1秒起飞, 第一种格式表示在当地时间 当日 h2时m2分s2秒降落 第二种格式表示在当地时间 次日 h3时m3分s3秒降落。 第三种格式表示在当地时间 第三天 h4时m4分s4秒降落。 对于此题目中的所有以 h:m:s 形式给出的时间, 保证 ( 0<=h<

蓝桥杯2018-省赛-C/C++-A组7题

空扰寡人 提交于 2020-02-10 20:31:33
不是满分解答,后面补上,之前提交的一部分题也是,后面会慢慢补上 题目 标题:三体攻击 【题目描述】 三体人将对地球发起攻击。为了抵御攻击,地球人派出了 A × B × C 艘战舰,在太空中排成一个 A 层 B 行 C 列的立方体。其中,第 i 层第 j 行第 k 列的战舰(记为战舰 (i, j, k))的生命值为 d(i, j, k)。 三体人将会对地球发起 m 轮“立方体攻击”,每次攻击会对一个小立方体中的所有战舰都造成相同的伤害。具体地,第 t 轮攻击用 7 个参数 lat, rat, lbt, rbt, lct, rct, ht 描述; 所有满足 i ∈ [lat, rat],j ∈ [lbt, rbt],k ∈ [lct, rct] 的战舰 (i, j, k) 会受到 ht 的伤害。如果一个战舰累计受到的总伤害超过其防御力,那么这个战舰会爆炸。 地球指挥官希望你能告诉他,第一艘爆炸的战舰是在哪一轮攻击后爆炸的。 【输入格式】 从标准输入读入数据。 第一行包括 4 个正整数 A, B, C, m; 第二行包含 A × B × C 个整数,其中第 ((i − 1)×B + (j − 1)) × C + (k − 1)+1 个数为 d(i, j, k); 第 3 到第 m + 2 行中,第 (t − 2) 行包含 7 个正整数 lat, rat, lbt, rbt, lct,

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

和自甴很熟 提交于 2020-02-10 20:25:54
题目 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来。 类似: 3/2 当然,这只是加了前2项而已。分子分母要求互质。 注意: 需要提交的是已经约分过的分数,中间任何位置不能含有空格。 请不要填写任何多余的文字或符号。 代码 1 /*以下式的计算为例 2 1+1/2+1/4+1/16 3 =1+1/2+1/4+1/16+1/16-1/16 4 =2-1/16 5 =31/16 6 */ 7 #include<iostream> 8 #include<stdio.h> 9 #include<cmath> 10 using namespace std; 11 int gcd(int a,int b){//辗转相除法,求最大公因数 12 return b?gcd(b,a%b):a; 13 } 14 int main(){ 15 int n; 16 cin>>n; 17 int gcdd=gcd(2*(int)pow(2,n-1)-1,(int)pow(2,n-1)); 18 if(gcdd==1) 19 printf("%d/%d",2*(int)pow(2,n-1)-1,(int)pow(2,n-1)); 20 else 21 printf("%d/%d",(2*(int

蓝桥杯备考——算法竞赛入门经典(第2版)学习笔记1

大城市里の小女人 提交于 2020-02-10 20:24:07
算法竞赛入门经典(第2版)学习笔记1 第一章 程序入门设计 1.1 算数表达式 1.2 变量及其输入 1.3 顺序结构程序设计 1.4 分支结构程序设计 1.5 注解与习题 第一章 程序入门设计 1.1 算数表达式 程序1-2:计算并输出8/5的值,保留小数点后1位 # include <stdio.h> int main ( ) { printf ( "%.1f\n" , 8.0 / 5.0 ) ; return 0 ; } 注1:%后的.1表示保留小数点后几位 注2:整数值用%d输出,实数用%f输出。只要运算符的两边都是整数,则运算结果也会是整数。8.0和5.0被看作是实数 注3:整数/整数=整数,浮点数/浮点数=浮点数 1.2 变量及其输入 注1:在算法竞赛中不要使用头文件conio.h,包括getch()、clrscr()等函数。注意输出格式!输出的每两个数或者字符串之间应以单个空格隔开 例题1-1 圆柱体的表面积 输入底面半径r和高h,输出圆柱体的表面积,保留3位小数 样例输入: 3.5 9 样例输出: Area=274.889 程序1-5: # include <stdio.h> # include <math.h> int main ( ) { const double pi = acos ( - 1.0 ) ; //Π的计算方法 double r , h , s1

蓝桥杯-2013省赛-振兴中华

蹲街弑〆低调 提交于 2020-02-10 17:48:24
蓝桥杯-2013省赛-振兴中华 题目描述 标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格子。 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。 要求跳过的路线刚好构成“从我做起振兴中华”这句话。 请你帮助小明算一算他一共有多少种可能的跳跃路线呢? 答案是一个整数,请通过浏览器直接提交该数字。 注意:不要提交解答过程,或其它辅助说明类的内容。 /*思考:从左上角走到右下角一共有多少种走法?其中又有多少符合要求呢? 枚举所有的走法,枚举有两种方法: 1.迭代 2.递归*/ 思路解析 除去华字,考虑,其他字只有两种走法,向右走或者向下走,利用递归 的思想: 终止条件为:走到华字,返回1(代表这是一条路线);走出格子范围,返回0(代表这条路线不通) // 2013-t3-振兴中华 # include <iostream> using namespace std ; // 递归走格子 int f ( int x , int y ) { if ( x == 3 && y == 4 ) // 走到华字 return 1 ; if ( x > 3 || y > 4 ) //