蓝桥杯那些事
来源:互联网 发布:pyqt5 知乎编程 编辑:程序博客网 时间:2024/05/20 11:46
标题: 振兴中华
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示:
我做起振兴
做起振兴中
起振兴中华
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。
要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
答案是一个整数,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。
以下为代码:
public class Main {static int moveX = 1;static int moveY = 1;static int nowX = 0;static int nowY = 0;static int maxX = 4;static int maxY = 5;static int wayNum = 0;static int nowNum = 1;static int array[][] = new int[][] {{1,2,3,4,5,},{2,3,4,5,6,},{3,4,5,6,7,},{4,5,6,7,8,}};public static void main(String[] args) {find8();System.out.println(wayNum);}static void find8(){nowX += moveX;if(nowX < maxX){if(array[nowX][nowY] == 8)wayNum++;find8();}nowX -= moveX;nowY += moveY;if(nowY < maxY){if(array[nowX][nowY] == 8)wayNum++;find8();}nowY -= moveY;}}
标题: 梅森素数
如果一个数字的所有真因子之和等于自身,则称它为“完全数”或“完美数”
例如:6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
早在公元前300多年,欧几里得就给出了判定完全数的定理:
若 2^n - 1 是素数,则 2^(n-1) * (2^n - 1) 是完全数。
其中 ^ 表示“乘方”运算,乘方的优先级比四则运算高,例如:2^3 = 8, 2 * 2^3 = 16, 2^3-1 = 7
但人们很快发现,当n很大时,判定一个大数是否为素数到今天也依然是个难题。
因为法国数学家梅森的猜想,我们习惯上把形如:2^n - 1 的素数称为:梅森素数。
截止2013年2月,一共只找到了48个梅森素数。 新近找到的梅森素数太大,以至于难于用一般的编程思路窥其全貌,所以我们把任务的难度降低一点:
1963年,美国伊利诺伊大学为了纪念他们找到的第23个梅森素数 n=11213,在每个寄出的信封上都印上了“2^11213-1 是素数”的字样。
2^11213 - 1 这个数字已经很大(有3000多位),请你编程求出这个素数的十进制表示的最后100位。
答案是一个长度为100的数字串,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。
以下为代码示例:
public class Main {public static void main(String[] args) {int back100[] = new int[100];int time = 11213;int jinwei = 0;back100[0] = 1;for (int i = 0; i < time; i++){for(int j = 0; j < 100; j++){if(back100[j]!=0)back100[j]*=2;back100[j]+=jinwei;if(back100[j] >= 10){back100[j] -= 10;jinwei = 1;}elsejinwei = 0;}jinwei = 0;}back100[0]--;for (int i = 99; i >= 0; i--)System.out.print(back100[i]);}}
标题: 颠倒的价牌
小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。
其标价都是4位数字(即千元不等)。
小李为了标价清晰、方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(参见p1.jpg)。
这种价牌有个特点,对一些数字,倒过来看也是合理的数字。如:1 2 5 6 8 9 0 都可以。这样一来,如果牌子挂倒了,有可能完全变成了另一个价格,比如:1958 倒着挂就是:8561,差了几千元啊!!
当然,多数情况不能倒读,比如,1110 就不能倒过来,因为0不能作为开始数字。
有一天,悲剧终于发生了。某个店员不小心把店里的某两个价格牌给挂倒了。并且这两个价格牌的电视机都卖出去了!
庆幸的是价格出入不大,其中一个价牌赔了2百多,另一个价牌却赚了8百多,综合起来,反而多赚了558元。
请根据这些信息计算:赔钱的那个价牌正确的价格应该是多少?
答案是一个4位的整数,请通过浏览器直接提交该数字。
注意:不要提交解答过程,或其它辅助说明类的内容。
以下是代码:
public class Main {public static void main(String[] args) {int num[]={0,1,2,-1,-1,5,9,-1,8,6};//记录转换的值int firstPrice, secondPrice; int dao_firstPrice, dao_secondPrice;int ge, shi, bai, qian;int temp = 0;//记录差值for(int i = 200; i < 10000; i++){if(i%10==0)continue;firstPrice = i;qian = firstPrice / 1000;bai = (firstPrice - qian *1000) / 100;shi = (firstPrice - qian *1000 - bai * 100) / 10;ge = firstPrice % 10;if(num[qian] < 0 || num[bai] < 0 ||num[shi] < 0 || num[ge] < 0)continue;dao_firstPrice = num[qian] + 10 * num[bai]+ 100 * num[shi] + 1000 * num[ge];if(firstPrice - dao_firstPrice > 200 && firstPrice - dao_firstPrice < 300){temp = 558 - dao_firstPrice + firstPrice;for(int x = 800; x < 10000; x++){if(x%10==0)continue;secondPrice = x;qian = secondPrice / 1000;bai = (secondPrice - qian *1000) / 100;shi = (secondPrice - qian *1000 - bai * 100) / 10;ge = secondPrice % 10;if(num[qian] < 0 || num[bai] < 0 ||num[shi] < 0 || num[ge] < 0)continue;dao_secondPrice = num[qian] + 10 * num[bai]+ 100 * num[shi] + 1000 * num[ge];if(dao_secondPrice - secondPrice > 800 && dao_secondPrice - secondPrice < 900){if(temp == dao_secondPrice - secondPrice){System.out.println(firstPrice);break;}}}}}}}结果为9088;
标题:三部排序
一般的排序有许多经典算法,如快速排序、希尔排序等。
但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
比如,对一个整型数组中的数字进行分类排序:
使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗!!
以下的程序实现了该目标。
static void sort(int[] x){int p = 0;int left = 0;int right = x.length-1;while(p<=right){if(x[p]<0){int t = x[left];x[left] = x[p];x[p] = t;left++;p++;}else if(x[p]>0){int t = x[right];x[right] = x[p];x[p] = t;right--; }else{_________________________; //代码填空位置}}}
如果给定数组:
25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0
25 18 -2 0 16 -5 33 21 0 19 -16 25 -3 0
则排序后为:
-3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25
请分析代码逻辑,并推测划线处的代码,通过网页提交
注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!
答案是:
p++;
标题:逆波兰表达式
正常的表达式称为中缀表达式,运算符在中间,主要是给人阅读的,机器求解并不方便。
例如:3 + 5 * (2 + 6) - 1
而且,常常需要用括号来改变运算次序。
相反,如果使用逆波兰表达式(前缀表达式)表示,上面的算式则表示为:
- + 3 * 5 + 2 6 1
不再需要括号,机器可以用递归的方法很方便地求解。
为了简便,我们假设:
1. 只有 + - * 三种运算符
2. 每个运算数都是一个小于10的非负整数
下面的程序对一个逆波兰表示串进行求值。
其返回值为一个数组:其中第一元素表示求值结果,第二个元素表示它已解析的字符数。
static int[] evaluate(String x){if(x.length()==0) return new int[] {0,0};char c = x.charAt(0);if(c>='0' && c<='9') return new int[] {c-'0',1};int[] v1 = evaluate(x.substring(1));int[] v2 = __________________________________________; //填空位置int v = Integer.MAX_VALUE;if(c=='+') v = v1[0] + v2[0];if(c=='*') v = v1[0] * v2[0];if(c=='-') v = v1[0] - v2[0];return new int[] {v,1+v1[1]+v2[1]};}
请分析代码逻辑,并推测划线处的代码,通过网页提交。
注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!
答案是:
x.substring(v1[1]+1);
世纪末的星期
曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破
还有人称今后的某个世纪末的12月31日,如果是星期一则会....
有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!于是,“谣言制造商”又修改为星期日......
1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)
请回答该年份(只写这个4位整数,不要写12月31等多余信息)
代码如下:
public class Main {public static void main(String[] args) {int nowYear = 1999;int gap = 100;int runYearNum = 0;int nowWeek = 5;int allDay = 0;while(true){for(int i = 0; i < gap; i++){nowYear++;if(nowYear % 4 == 0 && nowYear % 100 != 0){runYearNum++;}else if(nowYear % 400 ==0){runYearNum++;}}allDay = runYearNum * 366 + (gap - runYearNum) * 365;if((allDay - nowWeek) % 7 == 0)break;}System.out.println(nowYear);}}
- 蓝桥杯那些事
- 那些人,那些事
- 那些人,那些事。。。。。。
- 那些人,那些事...
- 那些人,那些事
- 那些人,那些事......
- 那些年,那些事
- 那些年,那些事
- 那些事
- 那些事~
- 2011—那些人那些事
- oracle的那些名字,那些事
- 考试的那些事
- Eclipse那些事-1
- 清明那些事
- 关于外包那些事!!!
- 大三那些事!
- 明朝那些事经典语录
- Socket网络编程入门
- 矩阵(n阶方阵)的初等变换 初等矩阵 几何意义
- oracle_基础八(Undo)
- Phone List 南邮NOJ 1522
- 最傻的人是我
- 蓝桥杯那些事
- 算法导论 第18章 B 树
- 统计源代码文件的总行数、空行数、注释行数、代码行数
- 将一个二叉树镜像
- 【R for fun 系列】汉诺塔
- C++ 运算结果出现 1.#IND, 1.#INF nan, inf 原因
- 在Azure 环境里安装 SharePoint 2013 系统(三)在Windows Azure VM中配置Sql Server 2012
- poj 3264 Balanced Lineup
- 乱七八糟-局域网内解决路由器无法支持ipv6问题……