蓝桥杯送分题(1,2题)

来源:互联网 发布:java微信后台开发 编辑:程序博客网 时间:2024/06/08 11:59
作为基础题,一般需要在5分钟内解决。
1.隔行变色

Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。

请你直接提交这个整数,千万不要填写任何多余的内容。


这道题直接口算,要点在于21到50中有多少行
分析方式:2到3中有:(3-2)+1行,然后奇偶折半即可
答案:15

2.有奖猜谜

小明很喜欢猜谜语。
最近,他被邀请参加了X星球的猜谜活动。

每位选手开始的时候都被发给777个电子币。
规则是:猜对了,手里的电子币数目翻倍,
猜错了,扣除555个电子币, 扣完为止。

小明一共猜了15条谜语。
战果为:vxvxvxvxvxvxvvx
其中v表示猜对了,x表示猜错了。

请你计算一下,小明最后手里的电子币数目是多少。

请填写表示最后电子币数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。


这道题的话,数字不多。本来打算用计算机直接算,但是还是容易乱,耗费时间比较长。
所以用代码和计算机配合的方式:
用6个循环处理vx vx vx vx vx vx
得到结果用计算机计算vvx部分
答案是:58497

3.土地测量
    造成高房价的原因有许多,比如土地出让价格。既然地价高,土地的面积必须仔细计算。遗憾的是,有些地块的形状不规则,比如是如图【1.jpg】中所示的五边形。

    一般需要把它划分为多个三角形来计算。

    已知三边求三角形的面积需要用海伦定理,参见【2.jpg】

    各条边长数据如下:
    AB = 52.1
    BC = 57.2
    CD = 43.5
    DE = 51.9
    EA = 33.4
    EB = 68.2
    EC = 71.9

    根据这些数据求五边形地块的面积。四舍五入到小数后两位。只写结果,不要源代码!



这道题本来想要用计算器做,但是耗费的时间太长,不如直接用代码把过程反映下来。(什么情况用代码:1.过程比较明确  2.较少的筛选条件)
用代码的话会涉及到:
1.Math.sqrt,用来计算开方
public class Test{
     public static void main(String[] args) {
          System.out.println(Math.sqrt(10));
     }
}
得到的结果是一个浮点数:3.1622776601683795
2.用到DecimalFormat
public class Test{
     public static void main(String[] args) {
          double pi=3.141592653;
          double a=10.54;
          long c=1314253222;
          System.out.println(new DecimalFormat("0.00#").format(pi));  //取改格式的数:支持四舍五入
          System.out.println(new DecimalFormat(".00#").format(a));  //1.取三个数,#也可以用    2.前面当不指定或者指定不全全显示
          System.out.println(new DecimalFormat("000.000").format(a));  //1.取三个数,当用0的时候不存在替代0   2.前面当指定多了用0补充
          System.out.println(new DecimalFormat(".000%").format(a));  //当加上%,会自动变百分制(乘上100)
          System.out.println(new DecimalFormat(",#000").format(c));  //前面加, 他会从右到左,在指定个数前加,
     }
}
结果:
3.142
10.54
010.540
1054.000%
13,1425,3222

    double s1=Math.sqrt(a*(a-AB)*(a-EB)*(a-EA));
    double s2=Math.sqrt(b*(b-BC)*(b-EB)*(b-EC));
    double s3=Math.sqrt(c*(c-CD)*(c-EC)*(c-DE));
    double all=s1+s2+s3;
    System.out.println(new DecimalFormat(".00").format(all));

用float就可以,知识要注意快速冷静。
正确答案为3789.86

4.猜年龄

 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。
  一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
 “我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”

 请你推算一下,他当时到底有多年轻

这里用计算机开方,最小的六位数100000开四方约为17,最大的四位数9999开3方约为21。所以答案在17到21之间,现在对之间的答案进行验证
很快就可得出只有18符合四次方和八次方的数字包含0到9

5.姐妹猜年龄

    小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“我们俩的年龄之积是年龄之和的6倍”。小明又补充说:“她们可不是双胞胎,年龄差肯定也不超过8岁啊。”

    请你写出:小明的较小的妹妹的年龄。

答案是10,使用两个for进行遍历筛选。

6.三角形面积

如【图1】所示。图中的所有小方格面积都是1。
那么,图中的三角形面积应该是多少呢?



目测题:28

7.黄金分割比    
黄金分割数0.618与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的0.618处,墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子....
黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.618只是它的近似值,其真值可以通过对5开方减去1再除以2来获得,我们取它的一个较精确的近似值:0.618034
有趣的是,一些简单的数列中也会包含这个无理数,这很令数学家震惊!
1 3 4 7 11 18 29 47 .... 称为“鲁卡斯队列”。它后面的每一个项都是前边两项的和。
如果观察前后两项的比值,即:1/3,3/4,4/7,7/11,11/18 ... 会发现它越来越接近于黄金分割数!
你的任务就是计算出从哪一项开始,这个比值四舍五入后已经达到了与0.618034一致的精度。
请写出该比值。格式是:分子/分母。比如:29/47

题目分析:
1.因为它一直相邻的两个数相除,一直除到某个数出现,所以采用递归方法
2.当传值进去,先将数值转化为所指定的位数格式
3.然后对比小数是否相同,相同则输出结束,否者第二项增加,进行递归,一直到找到为止
              arr[i]=arr[i-1]+arr[i-2];
              double zhi=(double)arr[i-1]/arr[i];
              String temp=new DecimalFormat("#.######").format(zhi);
              if(temp.equals("0.618034")){
                   System.out.println(arr[i-1]+"/"+arr[i]);
                   return;
              }
答案是1364/2207
注意要点:这里如果用int进行相除是得不出结果的。所以应该用double数组,或者int相除前面添加(double)强制转换,这里用后者输出更为简便。

8.世纪末日的星期
    曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。
    还有人称今后的某个世纪末的12月31日,如果是星期一则会....
    有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!
    于是,“谣言制造商”又修改为星期日......
    1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?
    请回答该年份(只写这个4位整数,不要写12月31等多余信息)


题目分析:
1.将年份%7算出剩余几天,加上去年剩的星期数再%7就是当前的星期数
2.注意%的使用:%7表示0-6的范围,当值为0的时候说明刚好星期日
3.筛选星期数+年份算出答案,注意筛选尾部为99

...  for (int i = 2000; ; i++) {
          if(i%4==0&&i%100!=0||i%400==0){   //闰年
              day=(366%7+day)%7;
          }else{
              day=(365%7+day)%7;
          }
          if(day==0&&i%100==99){    //99为尾条件
              System.out.println(i);
              return;
          }
     }...

答案是2299

9.有如下的加法算式。其中每个汉字代表一个数字。

                            年
                        大年
                    过大年
                能过大年
            怎能过大年
        我怎能过大年
+  让我怎能过大年
       ------------------
   能能能能能能能

请填写“让我怎能过大年” 所代表的整数。
所有数字连在一起,中间不要空格。例如:"3125697"。当然,这个不是正确的答案。

题目分析:
1.这道题采用最简单获取答案的方式:循环每一位,这里因为每一位都有可能是第一位,所以全部从1开始循环(去掉括号写更快)
2.通过加前一个数获取每一行的数,简化每行的获取过程(加上前一个的值)
3.暂时不对其重复性进行判断,把结果输出来,视数量选择是否编写去重复代码

...       int c1=a;
          int c2=b*10+c1;
          int c3=c*100+c2;
          int c4=d*1000+c3;
          int c5=e*10000+c4;
          int c6=f*100000+c5;
          int c7=g*1000000+c6;
          if(c1+c2+c3+c4+c5+c6+c7==1111111*d){
              System.out.println(g+" "+f+" "+e+" "+d+" "+c+" "+b+" "+a);
          }
注意输出时候的位置,个位应该放在最后面一位。
答案是:1572836

10.武功秘籍
    小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。
    小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走?
这是个整数,请通过浏览器提交该数字,不要填写任何多余的内容。

题目分析:
1.之间的页数为92-81+1=12页,因为头尾页的位置导致其两张独立,非独立的页数为(12-2)/2=5页,总共的页数为5+2=7

11.肇事汽车号码
一辆肇事汽车的号码是4位十进制数。目击者向交警描述这个车号:这是一个完全平方数;这4个数字从左至右一个比一个大。请帮助交警寻找肇事者,先将车号算出来。
完全平方数是指这个数是某个数的平方,例如 64就是完全平方数,因为64是8的平方。

题目分析:
1.完全平方数是最大的筛选条件,所以先把所有完全平方数列出来,如果数量不多久可以直接找出符合条件的答案了
2.如果找不出来再用编程进行排序筛选,这里答案是唯一的
     for (int i = 32; i<100; i++) {
          int mul=i*i;
          int a=mul/1000;
          int b=mul/100%10;
          int c=mul/10%10;
          int d=mul%10;
          if(a<b&&c<d&&b<c){
              System.out.println(mul);
          }
注意事项:
1.排序是从小到大
答案:1369

12.小李的银行存款
小李年初在银行存款1千元(一年定期)。他计划每年年底取出100元救助失学儿童。假设银行的存款利率不变,年利率为3%,年底利息自动计入本金。下面的代码计算5年后,该账户上有多少存款
输入n
输出n年后的账号余额,保留两位小数

题目分析:
1.确定迭代变量存款总额(被赋值再赋值的量)
2.编写迭代公式
3.控制迭代过程,5年迭代5次
4.输出值,保留两位小数(声明使用double)
     for (int i = 0; i < 5; i++) {
          allMoney=allMoney*1.03-100;
     }
     System.out.println(new DecimalFormat(".00").format(allMoney));
用for循环进行迭代,用DecimalFormat来进行取位四舍五入

13.求一个5位数的最大循环素数
1193是个素数,对它循环移位后发现:1931,9311,3119也都是素数,这样特征的数叫:循环素数。
你能找出具有这样特征的5位数的循环素数吗?当然,这样的数字可能有很多,请写出其中最大的一个。
注意:答案是个5位数,不要填写任何多余的内容。


题目分析:
1.使用合成法:逐位获取每一位的数字,并且必须是奇数(偶数不可能是素数)
2.迭代五次,将第一位放最后一位,判断是不是素数。但是还有更简便的方法,一次性把五种可能都列出来,进行素数验证(可能性比较少的,直接列出来!)
3.判断素数的方式:1.素数不为1值      2.从2循环到n/2(再高就不可能被整除了)
问题所在:

                       ...
                            for (int m = 1; m < 10; m=m+2) {
                             int a=i*10000+j*1000+k*100+l*10+m;
                             int b=j*10000+k*1000+l*100+m*10+i;
                             int c=k*10000+l*1000+m*100+i*10+j;
                             int d=l*10000+m*1000+i*100+j*10+k;
                             int e=m*10000+i*1000+j*100+k*10+l;
                             if(isPrime(a)&&isPrime(b)&&isPrime(c)&&isPrime(d)&&isPrime(e)){
                                  System.out.println(i*10000+j*1000+k*100+l*10+m);
                             }...
用合成法的方式,检查素数的时候从2到n/2,因为超过一半就不可能被整除了
答案为93719

14.位平方和
把一个整数的每个数位都平方后求和,又得到一个整数,我们称这个整数为:位平方和。
对新得到的整数仍然可以继续这一运算过程。
比如,给定整数为4,则一系列的运算结果为:
16,37,58,89,....
本题的要求是,已知一个整数x,求第n步的运算结果。
数据格式要求:
输入,两个整数x n,中间以空格分开。表示求x的第n步位平方和。其中,x,n都大于0,且小于100000。
输出,一个整数,表示所求结果。

例如,
输入:
4 3
则程序应该输出:
58

再例如,
输入:
1314 10
则程序应该输出:
20

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms

题目分析:
1.输入次数之后设立for循环
2.不断对该书平方和,注意是平方

...  for (int i = 0; i < num; i++) {
          while(ina>0){
              temp+=(ina%10)*(ina%10);
              ina=ina/10;
          }
          ina=temp;
          temp=0;
     }...
注意用到+=,再次使用要将临时存储的temp清空

15.x的x次方
如果x的x次幂结果为10,你能计算出x的近似值吗?
显然,这个值是介于2和3之间的一个数字。
请把x的值计算到小数后6位(四舍五入),并填写这个小数值。

题目分析:
1.这道题可以使用暴力破解,其原理就是e每次增加0.0000001,然后判断其e的e次方值是否接近10(但是这个时间复杂度太高)
2.这里使用二分查找法,设立一个最高和最低
3.每次取中间值,求平方(核心式子)。根据平方结果比较10修改最高最低值
4.判断是否近似相等(<0.000001表示第七位),输出结果
public static void main(String[] args) {
     double a;
     for (a = 2;  a< 3; a=a+0.0000001) {
          if(Math.abs(Math.pow(a, a)-10)<0.000001){
              System.out.println(new DecimalFormat("0.000000").format(a));
              return;
          }
     }
}
注意要点:加上的应该是四舍五入的后一位,而比较相等的是四舍五入的当前位数
答案是:2.506184

16.组素数
素数就是不能再进行等分的数。比如:2 3 5 7 11 等。
9 = 3 * 3 说明它可以3等分,因而不是素数。
我们国家在1949年建国。如果只给你 1 9 4 9 这4个数字卡片,可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊,我们不是在脑筋急转弯!),那么,你能组成多少个4位的素数呢?
比如:1949,4919 都符合要求。
请你提交:能组成的4位素数的个数,不要罗列这些素数!!

题目分析:
1.将题目分为两部分:a.是素数 b.带有1 4 9相应个数
2.判断素数:除了1和他本身,其他能被整除的数,为了缩小范围,循环到该数的开方
3.判断数的个数采用数组统计的方法,因为是个数而不止存在,所以用+=
 ...     for (int num = 1499; num <=9941 ; num++) {
              int[] arr=new int[10];
              if(isPrime(num)){
                   int temp=num;
                   while(temp>0){
                        arr[temp%10]+=1;
                        temp=temp/10;
                   }
                   if(arr[1]==1&&arr[9]==2&&arr[4]==1){
                        count++;
                        System.out.println(num);
                   }
              }
          }  ...
答案是:6
17.等额本金
    小明从银行贷款3万元。约定分24个月,以等额本金方式还款。
    这种还款方式就是把贷款额度等分到24个月。每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息。
    假设月利率是:0.005,即:千分之五。那么,
    第一个月,小明要还本金 1250, 还要还利息:30000 * 0.005,总计 1400
    第二个月,本金仍然要还 1250, 但利息为:(30000-1250) * 0.005 总计 1393.75
    请问:小明在第15个月,应该还款多少(本金和利息的总和)?
    请把答案金额四舍五入后,保留两位小数。注意:32.5,一定要写为:32.50

题目分析:
1.这里主要是题目理解的问题,利息是需要每个月偿还的,而因为分期,本金也是每个月在减少,而算利息是以下个月来算的,所以先减去分期在算利息,需要获取的只是当前的本金下的利息。
     double ben=30000;
     ben=ben-1250*14;
     System.out.println(ben*0.005+1250);
答案是:1312.50
0 0
原创粉丝点击