藍(lán)橋杯試題算法學(xué)習(xí)筆記一

題目

1、熊怪吃核桃

森林里有一只熊怪,很愛(ài)吃核桃。不過(guò)它有個(gè)習(xí)慣,每次都把找到的核桃分成相等的兩份,吃掉一份,留一份。如果不能等分,熊怪就會(huì)扔掉一個(gè)核桃再分。第二天再繼續(xù)這個(gè)過(guò)程,直到最后剩一個(gè)核桃了,直接丟掉。
有一天,熊怪發(fā)現(xiàn)了1543個(gè)核桃,請(qǐng)問(wèn),它在吃這些核桃的過(guò)程中,一共要丟掉多少個(gè)核桃。
請(qǐng)?zhí)顚?xiě)該數(shù)字(一個(gè)整數(shù)),不要填寫(xiě)任何多余的內(nèi)容或說(shuō)明文字。

/**
 * 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);
    }
}

運(yùn)行結(jié)果

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星人造“炸彈”,用來(lái)作為宇宙中的路標(biāo)。
每個(gè)炸彈都可以設(shè)定多少天之后爆炸。
比如:阿爾法炸彈2015年1月1日放置,定時(shí)為15天,則它在2015年1月16日爆炸。
有一個(gè)貝塔炸彈,2014年11月9日放置,定時(shí)為1000天,請(qǐng)你計(jì)算它爆炸的準(zhǔn)確日期。
請(qǐng)?zhí)顚?xiě)該日期,格式為 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
請(qǐng)嚴(yán)格按照格式書(shū)寫(xiě)。不能出現(xiàn)其它文字或符號(hào)。

/**
 * 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));
    }
}

運(yùn)行結(jié)果

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、循環(huán)節(jié)長(zhǎng)度

兩個(gè)整數(shù)做除法,有時(shí)會(huì)產(chǎn)生循環(huán)小數(shù),其循環(huán)部分稱為:循環(huán)節(jié)。
比如,11/13=6=>0.846153846153..... 其循環(huán)節(jié)為[846153] 共有6位。
下面的方法,可以求出循環(huán)節(jié)的長(zhǎng)度。
請(qǐng)仔細(xì)閱讀代碼,并填寫(xiě)劃線部分缺少的代碼。

       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類實(shí)現(xiàn)了一個(gè)動(dòng)態(tài)數(shù)組。和ArrayList和相似,但是兩者是不同的:
Vector是同步訪問(wèn)的。
Vector包含了許多傳統(tǒng)的方法,這些方法不屬于集合框架。

Vector主要用在事先不知道數(shù)組的大小,或者只是需要一個(gè)可以改變大小的數(shù)組的情況。

Vector類支持4種構(gòu)造方法。

第一種構(gòu)造方法創(chuàng)建一個(gè)默認(rèn)的向量,默認(rèn)大小為10:

v.indexOf(n)

意思是在動(dòng)態(tài)數(shù)組vector中找到n,并且返回該索引,未找到則返回 -1

所以只要找到這個(gè)值就說(shuō)明循環(huán)開(kāi)始了...
每次如果沒(méi)找到V數(shù)組都添加一個(gè)元素,找到的時(shí)候只需要返回?cái)?shù)組大小 return v.size()即可

4、打印菱形(此題菱形有問(wèn)題,先忽略)

給出菱形的邊長(zhǎng),在控制臺(tái)上打印出一個(gè)菱形來(lái)。
為了便于比對(duì)空格,我們把空格用句點(diǎn)代替。
當(dāng)邊長(zhǎng)為8時(shí),菱形為:
.......*

.......

........

.........

..........

...........

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

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

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

...........

..........

.........

........

.......

.......*

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個(gè)不同字符,將這N個(gè)字符全排列,最終的結(jié)果將會(huì)是N!種。如:給定 A、B、C三個(gè)不同的字符,則結(jié)果為: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));//將字母存到動(dòng)態(tài)數(shù)組里
        }
       new question().fullPermutation(sourse,result);
        System.out.println(question.count);//打印出總共個(gè)數(shù)

    }
}
解釋一下上邊代碼思路:
比如當(dāng)n=3的時(shí)候
初始化source=ABC
           result=null
當(dāng)i=0時(shí),source=BC (1)
               result=A
進(jìn)入遞歸再次執(zhí)行相同的過(guò)程
當(dāng)i=0時(shí),source=C  (2)
               result=AB
進(jìn)入遞歸再次執(zhí)行相同的過(guò)程
當(dāng)i=0時(shí),source=null
               result=ABC
當(dāng)source.size=0時(shí),打印出ABC

當(dāng)執(zhí)行上邊(2)時(shí),i=1時(shí)
               source=B
               result=AC
進(jìn)入遞歸再次執(zhí)行相同的過(guò)程
當(dāng)i=0時(shí),source=null
               result=ACB
當(dāng)source.size=0時(shí),打印出ACB

當(dāng)執(zhí)行上邊(1)時(shí),i=1時(shí)....重復(fù)步驟



運(yùn)行結(jié)果

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.熊怪吃核桃 森林里有一只熊怪,很愛(ài)吃核桃。不過(guò)它有個(gè)習(xí)慣,每次都把找到的核桃分成相等的兩份,吃掉一份,留一份。...
    icecrea閱讀 1,486評(píng)論 1 14
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,641評(píng)論 18 399
  • 1、三角形面積 如【圖1】所示。圖中的所有小方格面積都是1。那么,圖中的三角形面積應(yīng)該是多少呢? 請(qǐng)?zhí)顚?xiě)三角形的面...
    Jdqm閱讀 1,741評(píng)論 0 4
  • 最近一篇名為“那些被富養(yǎng)的女孩,現(xiàn)在怎么樣了”的文章好像蠻火的,我看完后不禁想到了我的家庭。 從我開(kāi)始我的住宿生活...
    琳噗噗閱讀 3,319評(píng)論 0 2
  • 原以為編一個(gè)故事是最容易的,結(jié)果孩子在身邊蹦來(lái)蹦去,沒(méi)有辦法繼續(xù)這個(gè)話題,邪邪看了娃一眼,那就寫(xiě)你吧。寫(xiě)作真...
    心無(wú)速閱讀 208評(píng)論 2 0

友情鏈接更多精彩內(nèi)容