成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

2015年第6屆藍(lán)橋杯Java B組省賽試題解析

felix0913 / 2035人閱讀

摘要:比如,其循環(huán)節(jié)為共有位。答案牌型種數(shù)小明被劫持到賭城,被迫與其他人玩牌。還有另外一種寫(xiě)法主要的思路是假設(shè)牌是從到按順序取的,表示取到牌數(shù)為的牌,表示目前一共取了多少?gòu)埮啤?/p>

1、三角形面積
如圖1所示。圖中的所有小方格面積都是1。
那么,圖中的三角形面積應(yīng)該是多少呢?
請(qǐng)?zhí)顚?xiě)三角形的面積。不要填寫(xiě)任何多余內(nèi)容或說(shuō)明性文字。

計(jì)算方法:
8 * 8 - (8 * 2 / 2 + 6 * 4 / 2 + 8 * 4 / 2)= 64 - (8+ 12 + 16) =64-36=28
2、立方變自身
觀察下面的現(xiàn)象,某個(gè)數(shù)字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17
...
請(qǐng)你計(jì)算包括1,8,17在內(nèi),符合這個(gè)性質(zhì)的正整數(shù)一共有多少個(gè)?
請(qǐng)?zhí)顚?xiě)該數(shù)字,不要填寫(xiě)任何多余的內(nèi)容或說(shuō)明性的文字。
public class CubeEqual {
    public static void main(String[] args) {

        int count = 0;
        for (int i = 1; i < 100; i++) {
            int s = i * i * i;
            if (i == fun(s)) {
                System.out.println("i = " + i);
                System.out.println("s = " + s);
                System.out.println("fun(s) = " + fun(s));
                count++;
            }
        }
        System.out.println("count = " + count);
    }

    static int fun(int a) {
        if (a < 10) {
            return a;
        }
        return fun(a / 10) + a % 10;
    }
}

答案:6
3、三羊獻(xiàn)瑞
觀察下面的加法算式 

其中,相同的漢字代表相同的數(shù)字,不同的漢字代表不同的數(shù)字。
請(qǐng)你填寫(xiě)“三羊獻(xiàn)瑞”所代表的4位數(shù)字(答案唯一),不要填寫(xiě)任何多余內(nèi)容。

容易推測(cè)得到:
三 => 1
羊 => 0
祥 => 9

羊等于0,各個(gè)漢字不同,所以:生=瑞+1;

由于 
生+獻(xiàn)=瑞 即: 瑞+1 +獻(xiàn)=瑞 => 獻(xiàn)等于8,或9,但是已經(jīng)有祥等于9了,所獻(xiàn)等于8.

輝和瑞相加一定大與等于10,由以上推出的數(shù)字可得:

輝,瑞 在[5,7 ] , [6, 7]兩種可能之中。
大約四種情況:代入等式去試一下,就能得出答案。

答案:1085
4、循環(huán)節(jié)長(zhǎng)度

兩個(gè)整數(shù)做除法,有時(shí)會(huì)產(chǎn)生循環(huán)小數(shù),其循環(huán)部分稱(chēng)為:循環(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 = new Vector();
    
    for(;;)
    {
        v.add(n);
        n *= 10;
        n = n % m;
        if(n==0) return 0;
        if(v.indexOf(n)>=0)  _________________________________ ;  //填空
    }
}

注意,只能填寫(xiě)缺少的部分,不要重復(fù)抄寫(xiě)已有代碼。不要填寫(xiě)任何多余的文字。

答案: return v.size()-v.index(n)

這一題非常容易漏掉v.index(n); 主要的原因是,比如20/7,和200/7 的循環(huán)節(jié)其實(shí)是一樣的,但是v.size()是不一樣的。

5、 九數(shù)組分?jǐn)?shù)

1,2,3…9 這九個(gè)數(shù)字組成一個(gè)分?jǐn)?shù),其值恰好為1/3,如何組法?

下面的程序?qū)崿F(xiàn)了該功能,請(qǐng)?zhí)顚?xiě)劃線部分缺失的代碼。

public class A
{
    public static void test(int[] x)
    {
        int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
        int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];     
        if(a*3==b) System.out.println(a + " " + b);
    }

    public static void f(int[] x, int k)
    {
        if(k>=x.length){
            test(x);
            return;
        }

        for(int i=k; i

咋一看,這一題好像很難,但是其實(shí)如果熟悉排列的寫(xiě)法,這題很簡(jiǎn)單。我們來(lái)看一下對(duì)一組數(shù)字進(jìn)行排列的示例代碼:

/**
 * 該類(lèi)主要用戶(hù)打印排列
 *
 * @author yunqing_shui@163.com
 */
public class Main {
    public static int count = 0;

    public static void main(String[] args) {
        int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
        per(a, 0, 4);
        System.out.println(count);
    }

    public static void swapTwoNumber(int a[], int i, int j) {
        if (i != j) {
            a[i] ^= a[j];
            a[j] ^= a[i];
            a[i] ^= a[j];
        }
    }

    /**
     * @param a
     * @param index 數(shù)組的起始位置
     * @param len   要排列的長(zhǎng)度
     */
    public static void per(int a[], int index, int len) {
        if (index == len) {
            print(a, len);
        }
        for (int i = index; i < len; i++) {
            // 交換兩個(gè)數(shù)
            swapTwoNumber(a, index, i);
            per(a, index + 1, len);
            // 交換兩個(gè)數(shù)
            swapTwoNumber(a, index, i);
        }
    }

    public static void print(int a[], int len) {
        for (int i = 0; i < len; i++) {
            System.out.print(a[i]);
        }
        count++;
        System.out.println();
    }
}

該題的題目意思很簡(jiǎn)單,由函數(shù)test(int[] x)得出,取出4個(gè)作為分子,取出五個(gè)作為分母。然后驗(yàn)證是否等于三分之一,所以本質(zhì)上就是對(duì)9個(gè)數(shù)字作排列,前4個(gè)作為分子,后5個(gè)作為分母。那么分析到這里。就很簡(jiǎn)單了。我們對(duì)比以下排列的核心代碼

   for (int i = index; i < len; i++) {
            // 交換兩個(gè)數(shù)
            swapTwoNumber(a, index, i);
            per(a, index + 1, len);
            // 交換兩個(gè)數(shù)
            swapTwoNumber(a, index, i);
        }
  for(int i=k; i

就能得出橫線部分就是交換數(shù)組中的兩個(gè)數(shù)。

答案:{int t=x[k]; x[k]=x[i]; x[i]=t;}
6、加法變乘法

我們都知道:1+2+3+ … + 49 = 1225
現(xiàn)在要求你把其中兩個(gè)不相鄰的加號(hào)變成乘號(hào),使得結(jié)果為2015

比如:
1+2+3+…+10 * 11+12+…+27*28+29+…+49 = 2015
就是符合要求的答案。

請(qǐng)你尋找另外一個(gè)可能的答案,并把位置靠前的那個(gè)乘號(hào)左邊的數(shù)字提交(對(duì)于示例,就是提交10)。

注意:需要你提交的是一個(gè)整數(shù),不要填寫(xiě)任何多余的內(nèi)容。

這一題沒(méi)有什么技術(shù)含量,暴力破解就行。

/**
 *
 * @author yunqing_shui@163.com
 */
public class Main6 {

    public static void main(String[] args) {
        int a[] = new int[49];
        for (int i = 0; i < 49; i++) {
            a[i] = i+1;
        }

        int b[] = new int[47];

        for (int x = 0; x < 46; x++) {
            for (int y = x + 2; y <= 48; y++) {

                for (int i = 0, j = 0; i < 47 && j < 49; i++, j++) {
                    if (i == x || i == y) {
                        int s = a[j] * a[j + 1];
                        b[i] = s;
                        j++;
                    } else {
                        b[i] = a[j];
                    }
                }

                if (sum(b) == 2015) {
                    System.out.println("x = " + (x+1));
                    System.out.println("y = " + (y+2));
                    System.out.println("Arrays.toString(a) = " + Arrays.toString(a));
                    System.out.println("Arrays.toString(b) = " + Arrays.toString(b));
                }
            }
        }

        System.out.println("sum = " + sum(b));
    }

    public static int sum(int a[]) {
        int s = 0;
        for (int i = 0; i < a.length; i++) {
            s += a[i];
        }
        return s;
    }
}
答案:16
7、牌型種數(shù)

小明被劫持到X賭城,被迫與其他3人玩牌。
一副撲克牌(去掉大小王牌,共52張),均勻發(fā)給4個(gè)人,每個(gè)人13張。
這時(shí),小明腦子里突然冒出一個(gè)問(wèn)題:
如果不考慮花色,只考慮點(diǎn)數(shù),也不考慮自己得到的牌的先后順序,自己手里能拿到的初始牌型組合一共有多少種呢?

請(qǐng)?zhí)顚?xiě)該整數(shù),不要填寫(xiě)任何多余的內(nèi)容或說(shuō)明文字。

在網(wǎng)上發(fā)現(xiàn)了dfs的方法,非常簡(jiǎn)潔

public class Seven3 {

    public static int ans = 0;

    static void dfs(int type, int sum) {
        if (sum > 13) return;
        if (type == 13) {
            if (sum == 13) ans++;
            return;
        }
        for (int i = 0; i < 5; i++) {
            dfs(type + 1, sum + i);
        }
    }

    public static void main(String[] args) {
        dfs(0, 0);
        System.out.println("ans = " + ans);
    }
}
2、線性規(guī)劃的解法

在網(wǎng)上看到有大神用線性規(guī)劃來(lái)求解問(wèn)題,佩服不已,代碼簡(jiǎn)潔高效,貼出代碼以供觀摩。

public class Seven {

    public static void main(String[] args) {
        int[][] dp = new int[14][14];
        dp[0][0] = 1;
        for (int i = 1; i < 14; i++)
            for (int j = 0; j < 14; j++)
                for (int k = 0; k < 5; k++)
                    if (j + k <= 13)
                        dp[i][j + k] += dp[i - 1][j];
        System.out.println(dp[13][13]);
    }
}

還有另外一種寫(xiě)法:

public class Seven2 {

    public static void main(String[] args) {
        int dp[][] = new int[14][14];
        dp[1][0] = dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = 1;

        for (int i = 2; i <= 13; i++) {
            for (int j = 0; j <= 13; j++) {
                if (j - 4 >= 0) dp[i][j] += dp[i-1][j-4];
                if (j - 3 >= 0) dp[i][j] += dp[i-1][j-3];
                if (j - 2 >= 0) dp[i][j] += dp[i-1][j-2];
                if (j - 1 >= 0) dp[i][j] += dp[i-1][j-1];
                dp[i][j] += dp[i-1][j];
            }
        }
        System.out.println(dp[13][13]);
    }
}

主要的思路是

假設(shè)牌是從1到13按順序取的,dp[i][j]表示取到牌數(shù)為i的牌,j表示目前一共取了多少?gòu)埮啤?br>比如 d[3][4] , 則i=3, j = 4 , 表示從A,2,3三種(i=3)牌中(每種4張,紅桃、方塊、黑桃、梅花)取出4(j=4)張 。
我們最重要的是確認(rèn)遞歸方程:從第一張牌開(kāi)始,每種牌都有5種可能:
1、這種牌取0個(gè)
2、這種牌取1個(gè)
3、這種牌取2個(gè)
4、這種牌取3個(gè)
5、這種牌取4個(gè)

首先我們需要推導(dǎo)出狀態(tài)轉(zhuǎn)換方程。

決策過(guò)程如下圖:

由上圖我們看出:

  dp[1][0] = dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = 1;

  dp[2][0] = dp[1][0] =1 ;

由上圖我們得到:

dp[2][1] = dp[1][0] +dp[1][1] ;


同樣的對(duì)于dp[2][2]

dp[2][2] = dp[1][0] +dp[1][1]+dp[1][2] ;

dp[2][3] = dp[1][0] +dp[1][1]+dp[1][2]+d[1][3] ;

類(lèi)似的:

dp[2][4] = dp[1][0] + dp[1][1] + dp[1][2] + dp[1][3] + d[1][4] ;
dp[2][5] = dp[1][1] + dp[1][2] + dp[1][3] + dp[1][4] + d[1][5] ;

說(shuō)明:dp[1][5]為不可能事件,所以為0. dp[1][5]就是一種牌里取出5個(gè)的意思。

由此我們歸納得出狀態(tài)轉(zhuǎn)移方程如下(沒(méi)有加限制條件):

得出轉(zhuǎn)移方程,我們就知道如何決策了。d13即13種牌,取出13張的總數(shù)。

回頭看一看代碼,基本明白了作者的思路:

public class Seven2 {

    public static void main(String[] args) {
        int dp[][] = new int[14][14];
        dp[1][0] = dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = 1;

        for (int i = 2; i <= 13; i++) {
            for (int j = 0; j <= 13; j++) {
                if (j - 4 >= 0) dp[i][j] += dp[i-1][j-4];
                if (j - 3 >= 0) dp[i][j] += dp[i-1][j-3];
                if (j - 2 >= 0) dp[i][j] += dp[i-1][j-2];
                if (j - 1 >= 0) dp[i][j] += dp[i-1][j-1];
                dp[i][j] += dp[i-1][j];
            }
        }
        System.out.println(dp[13][13]);
    }
}
第三種解法
以下是我的方法,思路是先求牌的個(gè)數(shù),如單張的有多少個(gè),對(duì)子有多少個(gè),三個(gè)的有多少個(gè),四個(gè)的有多少個(gè),0個(gè)的有多少個(gè)。
然后求排列,比較繁瑣一些,但是也能解決問(wèn)題。
import java.util.ArrayList;
import java.util.List;

/**
 * @author yunqing_shui@163.com
 */
public class Main7 {
    public static int S = 0;

    public static void main(String[] args) {


        ArrayList list0 = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            ArrayList list1 = new ArrayList<>(list0);
            for (int j = 0; j < 5; j++) {
                ArrayList list2 = new ArrayList<>(list1);
                for (int k = 0; k < 7; k++) {
                    ArrayList list3 = new ArrayList<>(list2);
                    for (int l = 0; l < 14; l++) {
                        sumList(list3);
                        list3.add(1);
                    }
                    list2.add(2);
                }
                list1.add(3);
            }
            list0.add(4);
        }
        System.out.println("S = " + S);

    }

    public static void sumList(List list) {
        int sum = 0;
        for (int i : list) {
            sum += i;
        }
        int a4 = 0;
        int a3 = 0;
        int a2 = 0;
        int a1 = 0;
        if (sum == 13) {
            for (int it : list) {
                if (it == 1) {
                    a1++;
                } else if (it == 2) {
                    a2++;
                } else if (it == 3) {
                    a3++;
                } else if (it == 4) {
                    a4++;
                }
            }
            int number = getCNM(13, a1) * getCNM(13 - a1, a2) * getCNM(13 - a1 - a2, a3) * getCNM(13 - a1 - a2 - a3, a4);
            S += number;
        }

    }

    public static int getANM(int a, int b) {
        int s = 1;
        for (int i = a; i > Math.max(b, a - b); i--) {
            s *= i;
        }
        return s;
    }

    public static int getCNM(int a, int b) {
        return getANM(a, b) / getN(Math.min(b, a - b));
    }

    public static int getN(int a) {
        if (a == 1 || a == 0) {
            return 1;
        }
        return a * getN(a - 1);
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/76378.html

相關(guān)文章

  • 第八藍(lán)橋省賽真題——2、等差數(shù)列

    摘要:題目標(biāo)題等差素?cái)?shù)列是素?cái)?shù)序列。類(lèi)似這樣完全由素?cái)?shù)組成的等差數(shù)列,叫等差素?cái)?shù)數(shù)列。上邊的數(shù)列公差為,長(zhǎng)度為。年,格林與華人陶哲軒合作證明了存在任意長(zhǎng)度的素?cái)?shù)等差數(shù)列。 題目 標(biāo)題:等差素?cái)?shù)列 2,3,5,7,11,13,….是素?cái)?shù)序列。類(lèi)似:7,37,67,97,127,157 這樣完全由素?cái)?shù)組成的等差數(shù)列,叫等差素?cái)?shù)數(shù)列。上邊的數(shù)列公差為30,長(zhǎng)度為6。2004年,格林與華人陶哲軒合作...

    IntMain 評(píng)論0 收藏0
  • 大學(xué)這么多比賽,我該參加哪個(gè)?

    摘要:針對(duì)計(jì)算機(jī)類(lèi)的同學(xué),數(shù)學(xué)建模,電子科技大賽,大創(chuàng),,藍(lán)橋杯這些都是值得參加的高含金量的比賽,無(wú)論是學(xué)校加分還是應(yīng)屆招聘,都被廣泛認(rèn)可。但近幾屆的藍(lán)橋杯題目難度已經(jīng)明顯增大,準(zhǔn)備參加的同學(xué)也決不可掉以輕心。 ...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • 2021藍(lán)橋你值得擁有

    摘要:文章目錄一你應(yīng)該知道的藍(lán)橋杯含金量獲獎(jiǎng)率高不高支持哪些編程語(yǔ)言二川川帶你體驗(yàn)藍(lán)橋杯省賽藍(lán)橋杯藍(lán)橋杯三個(gè)人感受一你應(yīng)該知道的藍(lán)橋杯如果你是計(jì)算機(jī)相關(guān)專(zhuān)業(yè),你不知藍(lán)橋杯就過(guò)不去了,我們來(lái)看看藍(lán)橋杯如何,不知道更應(yīng)該來(lái)了解下了。 ...

    fanux 評(píng)論0 收藏0
  • 2018第九藍(lán)橋Java b組總結(jié)

    摘要:現(xiàn)在小明想統(tǒng)計(jì)有哪些帖子曾經(jīng)是熱帖。如果一個(gè)帖子曾在任意一個(gè)長(zhǎng)度為的時(shí)間段內(nèi)收到不少于個(gè)贊,小明就認(rèn)為這個(gè)帖子曾是熱帖。以下行列代表一張海域照片。照片保證第行第列第行第列的像素都是海洋。 2018年4月1日愚人節(jié),我第一次參加了有關(guān)計(jì)算機(jī)算法類(lèi)比賽藍(lán)橋杯,這篇算是經(jīng)驗(yàn)總結(jié)和題目回顧,水平有限,有不妥之處歡迎留言批評(píng)指正,也可以加QQ891465170交流~下面進(jìn)入正題: 第一題:第幾...

    codecook 評(píng)論0 收藏0
  • 【兩萬(wàn)字精編~建議抱走】藍(lán)橋算法競(jìng)賽系列第0章——藍(lán)橋必考點(diǎn)及標(biāo)準(zhǔn)模板庫(kù)STL(下)

    摘要:時(shí)間復(fù)雜度為,和分別是和的長(zhǎng)度示例如下輸出輸出把從號(hào)位開(kāi)始長(zhǎng)度為的子串替換為上把的迭代器范圍的子串替換為示例如下 歡迎回到:遇見(jiàn)藍(lán)橋遇見(jiàn)你,不負(fù)代碼不負(fù)卿! 目錄 【補(bǔ)充】:常用頭文件及庫(kù)函數(shù) 1.#include sscanf() 和 sprintf() 2.#include 3.#...

    sixleaves 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<