1、蓝桥杯省赛赛前集训题共题 SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#蓝桥杯省赛赛前集训题共题第1题:星系炸弹(2015年省赛C/C+B组第2题)在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。每个炸弹都可以设定多少天之后爆炸。比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19请严格按照格式书写。不能出现其它文字或符号。
2、结果:2017-08-05解决方法:用Excel拖这个题会了的同学们把上课讲过的,课件上的,其他几道Excel拖动题都做一遍。第2题:(2015年校内选拔赛C/C+B组第3题)如果x的x次幂结果为10(参见【图】),你能计算出x的近似值吗显然,这个值是介于2和3之间的一个数字。请把x的值计算到小数后6位(四舍五入),并填写这个小数值。注意:只填写一个小数,不要写任何多余的符号或说明。#include #include #include using namespace std;int main() double x; for(x=2;x=3;x+=1e-7) if (abs(pow(x,x)-1
3、0)1e-6) coutfixedsetprecision(6)x; return 0;答案:其他类似题:ALGO-23一元三次方程求解第3题(全排列)注意:全排列必考!全排列必考!全排列必考!重要的事要说三遍!李白打酒(2014年省赛本科B组第3题)话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。? 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理
4、的次序。像这样的答案一共有多少呢请你计算出所有可能方案的个数(包含题目给出的)。答案:14解法1:next_permutation的解法#include#includeusing namespace std;int main() int p15=1,1,1,1,1,2,2,2,2,2,2,2,2,2,2;/十六进制转十进制 .当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 15 .我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)输入为3个整数w m n,空格
5、分开,都在1到10000范围内w为排号宽度,m,n为待计算的楼号。要求输出一个整数,表示m n 两楼间最短移动距离。例如:用户输入:6 8 2则,程序应该输出:4再例如:用户输入:4 7 20则,程序应该输出:5有同学居然说,前面7题做了一个小时。第8题做了2个小时没做出来。掌握了求余运算课件里的单变量矩阵坐标转双变量的方法,就很容易了#include #include using namespace std;int main() int w,m,n; int i,j;所填字母只允许是A,B,C,D,E,F 中的某一个。2. 每行的6个小格中,所填写的字母不能重复。3. 每列的6个小格中,所填
6、写的字母不能重复。4. 每个分组(参见图中不同颜色表示)包含的6个小格中,所填写的字母不能重复。为了表示上的方便,我们用下面的6阶方阵来表示图对应的分组情况(组号为05):000011022013221113243333244455445555 用下面的数据表示其已有字母的填写情况:02C03B05A20D35E53F 很明显,第一列表示行号,第二列表示列号,第三列表示填写的字母。行号、列号都从0开始计算。 一种可行的填写方案(此题刚好答案唯一)为:E F C B D AA C E D F BD A B E C FF B D C A EB D F A E CC E A F B D你的任务是:编
7、写程序,对一般的拉丁方块问题求解,如果多解,要求找到所有解。【输入、输出格式要求】 用户首先输入6行数据,表示拉丁方块的分组情况。 接着用户输入一个整数n (n36), 表示接下来的数据行数 接着输入n行数据,每行表示一个预先填写的字母。 程序则输出所有可能的解(各个解间的顺序不重要)。 每个解占用7行。 即,先输出一个整数,表示该解的序号(从1开始),接着输出一个6x6的字母方阵,表示该解。 解的字母之间用空格分开。 如果找不到任何满足条件的解,则输出“无解”例如:用户输入:000011022013221113243333244455445555602C03B05A20D35E53F 则程序
8、输出:1E F C B D AA C E D F BD A B E C FF B D C A EB D F A E CC E A F B D再如,用户输入:001111002113022243022443544433555553704B05A13D14C24E50C51A 则程序输出:1D C E F B AE F A D C BA B F C E DB E D A F CF D C B A EC A B E D F2D C E F B AE F A D C BA D F B E CB E C A F DF B D C A EC A B E D F3D C F E B AA E B D C F
9、F D A C E BB F E A D CE B C F A DC A D B F E4D C F E B AB E A D C FA D C F E BF B E A D CE F B C A DC A D B F E5D C F E B AE F A D C BA B C F E DB E D A F CF D B C A EC A E B D F6D C F E B AE F A D C BA B D F E CB E C A F DF D B C A EC A E B D F7D C F E B AE F A D C BA D B F E CB E C A F DF B D C A
10、EC A E B D F8D C F E B AF E A D C BA D B C E FB F E A D CE B C F A DC A D B F E9D C F E B AF E A D C BA F C B E DB D E A F CE B D C A FC A B F D E#include using namespace std;char a66;/存放分组情况char c66;/存放数独int cnt;bool ok(int row,int col) int i,j; for(i=0;i6;i+)/检查行 if(crowi=crowcol&i!=col) return fa
11、lse; for(i=0;i6;i+)/检查列 if(cicol=crowcol&i!=row) return false; for(i=0;i6;i+)/检查同一区域 for(j=0;j6;j+) if(aij=arowcol&cij=crowcol&!(i=row&j=col) return false; return true;void sudoku(int idx) int i,j; char k; if(idx=36) cout+cntendl; for(i = 0; i 6; i+) for(j = 0; j 6; j+) coutcij; if(j!=5) cout ; cout
12、endl; return; int row = idx / 6; int col = idx % 6; if(crowcol=0) for(k=A;k=F;k+) crowcol=k;/填字母 if(ok(row,col) sudoku(idx+1);/如果不冲突,则继续递归填下一个 crowcol=0; else/遇到预先填好的字母 sudoku(idx+1);int main() int i,j,n; string s; for(i=0;iai; cinn; while(n-) cins; int x=s0-0; int y=s1-0; cxy=s2; sudoku(0); if(cnt=
13、0) cout无解endl; return 0;第14题(bfs算法)ADV-147 算法提高 学霸的迷宫问题描述学霸抢走了大家的作业,班长为了帮同学们找回 作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨 刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路 线。输入格式第一行两个整数n, m,为迷宫的长宽。接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。假设
14、你现在已经在迷宫坐标(1,1)的地方,即 左上角,迷宫的出口在(n,m)。每次移动时只能向上下左右4个方向移动到另外一个可以通过的格子里,每次移动算一步。数据保证(1,1),(n,m)可 以通过。输出格式第一行一个数为需要的最少步数K。第二行K个字符,每个字符U,D,L,R,分别表示上下左右。如果有多条长度相同的最短路径,选择在此表示方法下字典序最小的一个。样例输入Input Sample 1:3 3001100110Input Sample 2:3 3000000000样例输出Output Sample 1:4RDRDOutput Sample 2:4DDRR数据规模和约定有20%的数据满足
15、:1=n,m=10有50%的数据满足:1=n,m=50有100%的数据满足:1=n,m=500。#include#includeusing namespace std;#define M 500 #define N 500 /上下左右UDLR,按字典序排是DLRU,即下左右上,所以d数组调整了一下 const int d2 = 1,0, 0,-1, 0,1, -1,0,;bool mazeMN;/位置点的状态,0表示通道,1表示墙bool visitedMN;/标志着该点是否被访问到了int m,n;/迷宫的实际行数和列数struct Point /结构体,表示位置点 int x,y;/位置点
16、的横纵坐标 ;Point preMN;/记录了到达本点前一步的那个点的坐标int step; string s=;void print_path(Point p)/递归打印路径 if=0&=0) return; Point q = pre; print_path(q); step+; if s+=D; else if s+=R; else s+=L;void bfs()/广度优先算法bfs queue Q;/定义队列Q Point p=0,0; visited00=true;/入口点被访问 (p);/入口点入队 while(!()/当队列不为空时 Point head=();/读队首元素 ();/队首元素出队 int x = ; int y = ; if(x=m-1 & y=n-1) /到达终点 print_path(head);/打印 return;/到达终点,停止bfs() for(int i=0; i=0 & r=0 & cmn; for(int i=0;im;i+) for(int j=0;jc; mazeij=c-0; bfs(); coutstependl; coutsendl; return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1