蓝桥杯试题算法学习笔记一题目

题目

1、熊怪吃核桃

森林里有一只熊怪,很爱吃核桃。不过它有个习惯,每次都把找到的核桃分成相等的两份,吃掉一份,留一份。如果不能等分,熊怪就会扔掉一个核桃再分。第二天再继续这个过程,直到最后剩一个核桃了,直接丢掉。 有一天,熊怪发现了1543个核桃,请问,它在吃这些核桃的过程中,一共要丢掉多少个核桃。 请填写该数字(一个整数),不要填写任何多余的内容或说明文字。

/**
 * Created by junyi.pc on 2017/1/25.
 */
public class Main {
    public static void main(String[] args){
        int number=0;
        int sum=1543;
        while (sum!=0){
            if (sum%2==1){
                number++;
                sum=(sum-1)/2;
            }
            else{
                sum=sum/2;
            }

        }
        System.out.print(number);
    }
}

运行结果

C:\java\jdk1.8.0_25\bin\java -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\java\jdk1.8.0_25\jre\lib\charsets.jar;C:\java\jdk1.8.0_25\jre\lib\deploy.jar;C:\java\jdk1.8.0_25\jre\lib\ext\access-bridge-64.jar;C:\java\jdk1.8.0_25\jre\lib\ext\cldrdata.jar;C:\java\jdk1.8.0_25\jre\lib\ext\dnsns.jar;C:\java\jdk1.8.0_25\jre\lib\ext\jaccess.jar;C:\java\jdk1.8.0_25\jre\lib\ext\jfxrt.jar;C:\java\jdk1.8.0_25\jre\lib\ext\localedata.jar;C:\java\jdk1.8.0_25\jre\lib\ext\nashorn.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunec.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunjce_provider.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunmscapi.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunpkcs11.jar;C:\java\jdk1.8.0_25\jre\lib\ext\zipfs.jar;C:\java\jdk1.8.0_25\jre\lib\javaws.jar;C:\java\jdk1.8.0_25\jre\lib\jce.jar;C:\java\jdk1.8.0_25\jre\lib\jfr.jar;C:\java\jdk1.8.0_25\jre\lib\jfxswt.jar;C:\java\jdk1.8.0_25\jre\lib\jsse.jar;C:\java\jdk1.8.0_25\jre\lib\management-agent.jar;C:\java\jdk1.8.0_25\jre\lib\plugin.jar;C:\java\jdk1.8.0_25\jre\lib\resources.jar;C:\java\jdk1.8.0_25\jre\lib\rt.jar;C:\Users\junyi.pc\Desktop\client\out\production\client;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain Main
5
Process finished with exit code 0

2、星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。 有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。 请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19 请严格按照格式书写。不能出现其它文字或符号。

/**
 * Created by junyi.pc on 2017/1/25.
 */
import  java.util.Calendar;
public class Main {
    public static void main(String[] args){
        Calendar calendar=Calendar.getInstance();
        calendar.set(2014,10,9);
        calendar.add(Calendar.DAY_OF_YEAR,1000);
        System.out.println(calendar.get(Calendar.YEAR)+"-"+calendar.get(Calendar.MONTH)+"-"+calendar.get(Calendar.DATE));
    }
}

运行结果

C:\java\jdk1.8.0_25\bin\java -Didea.launcher.port=7533 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\java\jdk1.8.0_25\jre\lib\charsets.jar;C:\java\jdk1.8.0_25\jre\lib\deploy.jar;C:\java\jdk1.8.0_25\jre\lib\ext\access-bridge-64.jar;C:\java\jdk1.8.0_25\jre\lib\ext\cldrdata.jar;C:\java\jdk1.8.0_25\jre\lib\ext\dnsns.jar;C:\java\jdk1.8.0_25\jre\lib\ext\jaccess.jar;C:\java\jdk1.8.0_25\jre\lib\ext\jfxrt.jar;C:\java\jdk1.8.0_25\jre\lib\ext\localedata.jar;C:\java\jdk1.8.0_25\jre\lib\ext\nashorn.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunec.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunjce_provider.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunmscapi.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunpkcs11.jar;C:\java\jdk1.8.0_25\jre\lib\ext\zipfs.jar;C:\java\jdk1.8.0_25\jre\lib\javaws.jar;C:\java\jdk1.8.0_25\jre\lib\jce.jar;C:\java\jdk1.8.0_25\jre\lib\jfr.jar;C:\java\jdk1.8.0_25\jre\lib\jfxswt.jar;C:\java\jdk1.8.0_25\jre\lib\jsse.jar;C:\java\jdk1.8.0_25\jre\lib\management-agent.jar;C:\java\jdk1.8.0_25\jre\lib\plugin.jar;C:\java\jdk1.8.0_25\jre\lib\resources.jar;C:\java\jdk1.8.0_25\jre\lib\rt.jar;C:\Users\junyi.pc\Desktop\client\out\production\client;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain Main
2017-7-5

Process finished with exit code 0

3、循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。 比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位。 下面的方法,可以求出循环节的长度。 请仔细阅读代码,并填写划线部分缺少的代码。

       public static int f(int n, int m)

       {

              n = n % m;    

              Vector v = newVector();
              for(;;)

              {

                     v.add(n);

                     n *= 10;

                     n = n % m;

                     if(n==0) return 0;

                     if(v.indexOf(n)>=0)  _________________________________ ;  //填空

              }

       }

答案:return v.size()

解释一下这段代码

Vector

Vector类实现了一个动态数组。和ArrayList和相似,但是两者是不同的: Vector是同步访问的。 Vector包含了许多传统的方法,这些方法不属于集合框架。

Vector主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。

Vector类支持4种构造方法。

第一种构造方法创建一个默认的向量,默认大小为10:

v.indexOf(n)

意思是在动态数组vector中找到n,并且返回该索引,未找到则返回 -1

所以只要找到这个值就说明循环开始了... 每次如果没找到V数组都添加一个元素,找到的时候只需要返回数组大小 return v.size()即可

4、打印菱形(此题菱形有问题,先忽略)

给出菱形的边长,在控制台上打印出一个菱形来。 为了便于比对空格,我们把空格用句点代替。 当边长为8时,菱形为: .......*

.......

........

.........

..........

...........

............

.............

............

...........

..........

.........

........

.......

.......*

public class A

{

       public static void f(int n)

       {       

              String s ="*";

              for(int i=0;i<2*n-3; i++) s += ".";

              s +="*";

      

              String s1 = s +"\n";

              String s2 ="";

             

              for(int i=0;i<n-1; i++){

                     //System.out.println("=>"+s);

                     s = "." +_____________________________________ + "*";  //填空

                     s1 = s + "\n" + s1;

                     s2 += s + "\n";

              }

              System.out.println(s1+s2);          

       }

      

       public static void main(String[] args)

       {

              f(8);

       }

}

答案:s = "." + ".............".substring(0,i) + new String(new char[]{''},0,n-2-i>0?1:0)+".............".substring(0,2(n-2-i)-1>0?2(n-2-i)-1:0) + "";

5、 字符排序

算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。

/**
 * Created by junyi.pc on 2017/1/25.
 */
import  java.util.Calendar;
import java.util.Scanner;
import java.util.Vector;
class  question{
        public  static  long  count=0;
    public void fullPermutation(Vector<Character> sourse, Vector<Character> result) {
        System.out.print(sourse.size());
        System.out.print("\n");
        if(sourse.size()==0){
            for (int i = 0; i < result.size(); i++) {
                System.out.print(result.elementAt(i));
            }
            System.out.print("\n");
            count++;
            return;
        }

        for (int i = 0; i < sourse.size(); i++) {
            Vector<Character>tsourse=new Vector<Character>(sourse);
            Vector<Character>tresult=new Vector<Character>(result);
            tresult.add(sourse.elementAt(i));
            tsourse.remove(i);
            new  question().fullPermutation(tsourse,tresult);
        }

    }


}
public class Main {

    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        Vector<Character> sourse=new Vector<Character>();
        Vector<Character> result=new Vector<Character>();
        for(int i=0;i<n;i++){
            sourse.add((char)('A'+i));//将字母存到动态数组里
        }
       new question().fullPermutation(sourse,result);
        System.out.println(question.count);//打印出总共个数

    }
}
解释一下上边代码思路:
比如当n=3的时候
初始化source=ABC
           result=null
当i=0时,source=BC (1)
               result=A
进入递归再次执行相同的过程
当i=0时,source=C  (2)
               result=AB
进入递归再次执行相同的过程
当i=0时,source=null
               result=ABC
当source.size=0时,打印出ABC

当执行上边(2)时,i=1时
               source=B
               result=AC
进入递归再次执行相同的过程
当i=0时,source=null
               result=ACB
当source.size=0时,打印出ACB

当执行上边(1)时,i=1时....重复步骤

运行结果

C:\java\jdk1.8.0_25\bin\java -Didea.launcher.port=7540 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\java\jdk1.8.0_25\jre\lib\charsets.jar;C:\java\jdk1.8.0_25\jre\lib\deploy.jar;C:\java\jdk1.8.0_25\jre\lib\ext\access-bridge-64.jar;C:\java\jdk1.8.0_25\jre\lib\ext\cldrdata.jar;C:\java\jdk1.8.0_25\jre\lib\ext\dnsns.jar;C:\java\jdk1.8.0_25\jre\lib\ext\jaccess.jar;C:\java\jdk1.8.0_25\jre\lib\ext\jfxrt.jar;C:\java\jdk1.8.0_25\jre\lib\ext\localedata.jar;C:\java\jdk1.8.0_25\jre\lib\ext\nashorn.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunec.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunjce_provider.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunmscapi.jar;C:\java\jdk1.8.0_25\jre\lib\ext\sunpkcs11.jar;C:\java\jdk1.8.0_25\jre\lib\ext\zipfs.jar;C:\java\jdk1.8.0_25\jre\lib\javaws.jar;C:\java\jdk1.8.0_25\jre\lib\jce.jar;C:\java\jdk1.8.0_25\jre\lib\jfr.jar;C:\java\jdk1.8.0_25\jre\lib\jfxswt.jar;C:\java\jdk1.8.0_25\jre\lib\jsse.jar;C:\java\jdk1.8.0_25\jre\lib\management-agent.jar;C:\java\jdk1.8.0_25\jre\lib\plugin.jar;C:\java\jdk1.8.0_25\jre\lib\resources.jar;C:\java\jdk1.8.0_25\jre\lib\rt.jar;C:\Users\junyi.pc\Desktop\client\out\production\client;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.1\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain Main
3
ABC
ACB
BAC
BCA
CAB
CBA
6

Process finished with exit code 0

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jeremy的技术点滴

py3_cookbook_notes_01

3228
来自专栏码匠的流水账

聊聊rocketmq的BrokerHousekeepingService

本文主要研究一下rocketmq的BrokerHousekeepingService

1071
来自专栏阮一峰的网络日志

Unicode与JavaScript详解

上个月,我做了一次分享,详细介绍了Unicode字符集,以及JavaScript语言对它的支持。下面就是这次分享的讲稿。 ? 一、Unicode是什么? Uni...

3487
来自专栏小灰灰

java之通过反射生成并初始化对象

java之通过反射生成并初始化对象 在博文 《java之的读取文件大全》 中读取csv文件后,需要自己将csv文件的对象转为自己的DO对象,那么有没有办法我...

1K6
来自专栏算法修养

PAT 甲级 1104 sum of Number Segments

1104. Sum of Number Segments (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16...

2795
来自专栏SeanCheney的专栏

《Pandas Cookbook》第07章 分组聚合、过滤、转换1. 定义聚合2. 用多个列和函数进行分组和聚合3. 分组后去除多级索引4. 自定义聚合函数5. 用 *args 和 **kwargs

第01章 Pandas基础 第02章 DataFrame运算 第03章 数据分析入门 第04章 选取数据子集 第05章 布尔索引 第06章 索引对齐 ...

3502
来自专栏二进制文集

Thrift 对象序列化、反序列化-字节数组分析

本篇博客仅分析Thrift对象的序列化、反序列化的字节数组,以及Thrift对象的序列化、反序列化原理。其他源码分析会另开章节~

2012
来自专栏HansBug's Lab

2431: [HAOI2009]逆序对数列

2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 954  Solv...

2886
来自专栏一个会写诗的程序员的博客

《Kotlin极简教程》第五章 Kotlin面向对象编程(OOP)一个OOP版本的HelloWorld构造函数传参Data Class定义接口&实现之写pojo bean定一个Rectangle对象封

We frequently create a class to do nothing but hold data. In such a class some s...

2084
来自专栏每日一篇技术文章

Swift3.0 - 字典

552

扫码关注云+社区

领取腾讯云代金券