日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

2015年 第6届 蓝桥杯 Java B组 省赛解析及总结

發(fā)布時(shí)間:2024/9/30 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2015年 第6届 蓝桥杯 Java B组 省赛解析及总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 藍(lán)橋杯 Java B組 省賽決賽 真題詳解及小結(jié)匯總【2013年(第4屆)~2021年(第12屆)】
  • 第11屆 藍(lán)橋杯-第1、2次模擬(軟件類)真題-(2020年3月、4月)-官方講解視頻

  • 說明:部分題解思路及程序代碼 源自?藍(lán)橋杯 官網(wǎng)視頻(Java B組歷年真題解析)
  • 2013年 第04屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)
  • 2014年 第05屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)
  • 2015年 第06屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)
  • 2016年 第07屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)
  • 2017年 第08屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)
  • 2018年 第09屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)
  • 2019年?第10屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)
  • 2020年?第11屆 藍(lán)橋杯 第1次模擬賽真題詳解及小結(jié)【Java版】(校內(nèi)模擬)//?官方講解視頻
  • 2020年?第11屆 藍(lán)橋杯 第2次模擬賽真題詳解及小結(jié)【Java版】//?官方講解視頻
  • 2020年?第11屆 藍(lán)橋杯 C/C++ B組 省賽真題詳解及小結(jié)【第1場省賽 2020.07.05】【Java版】
  • 2020年?第11屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)【第1場省賽 2020.07.05】
  • 2020年 第11屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)【第2場省賽 2020.10.17】
  • 2020年?第11屆 藍(lán)橋杯 Java C組 省賽真題詳解及小結(jié)【第1場省賽 2020.07.05】
  • 2021年 第12屆 藍(lán)橋杯 第1次模擬賽真題詳解及小結(jié)【Java版】
  • 2021年 第12屆 藍(lán)橋杯 第2次模擬賽真題詳解及小結(jié)【Java版】
  • 2021年 第12屆 藍(lán)橋杯 第3次模擬賽真題詳解及小結(jié)【Java版】
  • 2021年 第12屆 藍(lán)橋杯 第4次模擬賽真題詳解及小結(jié)【Java版】
  • 2021年 第12屆 藍(lán)橋杯【備賽 直播 公開課 —— 軟件類(本科組、高職高專組)】
  • 2021年 第12屆 藍(lán)橋杯 Java B組 省賽真題詳解及小結(jié)

  • 2015年 第06屆 藍(lán)橋杯 Java B組 決賽真題詳解及小結(jié)
  • 2016年 第07屆 藍(lán)橋杯 Java B組 決賽真題詳解及小結(jié)
  • 2017年 第08屆 藍(lán)橋杯 Java B組 決賽真題詳解及小結(jié)
  • 2018年 第09屆 藍(lán)橋杯 Java B組 決賽真題詳解及小結(jié)
  • 2019年 第10屆 藍(lán)橋杯 Java B組 決賽真題詳解及小結(jié)
  • 2020年 第11屆 藍(lán)橋杯 Java B組 決賽真題詳解及小結(jié)
  • 目? ?錄

    一、三角形面積

    二、立方變自身

    三、三羊獻(xiàn)瑞

    四、循環(huán)節(jié)長度

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

    六、加法變乘法

    七、牌型種數(shù)

    八、飲料換購

    九、壘骰子

    矩陣乘法、矩陣快速冪

    位運(yùn)算 快速求 i^n

    十、生命之樹

    小結(jié)


    ? ??

    一、三角形面積

    三角形面積

    如【圖1】所示。圖中的所有小方格面積都是1。

    圖1.jpg


    那么,圖中的三角形面積應(yīng)該是多少呢?

    請?zhí)顚懭切蔚拿娣e。不要填寫任何多余內(nèi)容或說明性文字。

    【答案】:28

    【解析】:8*8 - (8*2)/2 -?(4*6)/2?- (8*4)/2 = 64 - (8+12+16) =?64 - 36 = 28

    package provincialGames_06_2015_JavaB;public class A01_三角形面積 { // 28public static void main(String[] args) {System.out.println(64 - 36); // 28System.out.println(8 * 8 - (8 * 2) / 2 - (4 * 6) / 2 - (8 * 4) / 2); // 28} // 12 8 16 }

    二、立方變自身

    立方變自身

    觀察下面的現(xiàn)象,某個數(shù)字的立方,按位累加仍然等于自身。
    1^3 = 1?
    8^3 ?= 512 ? ?5+1+2=8
    17^3 = 4913 ? 4+9+1+3=17
    ...

    請你計(jì)算包括1,8,17在內(nèi),符合這個性質(zhì)的正整數(shù)一共有多少個?

    請?zhí)顚懺摂?shù)字,不要填寫任何多余的內(nèi)容或說明性的文字。

    【答案】:6

    簡單枚舉? ? ? ? ? i^3? ? ? ? ? ?99之后,數(shù)字越大,數(shù)字之和越不可能等于其自身。

    package provincialGames_06_2015;public class A02_立方變自身 {private static int ans;public static void main(String[] args) { // 6for (int i = 1; i < 99; i++) {int i1 = i * i * i;int sum = sum(i1);if (sum == i) {System.out.println(i + " " + i1);ans++;}}System.out.println(ans);}private static int sum(int x) {String s = String.valueOf(x);int sum = 0;for (int i = 0; i < s.length(); i++) {sum += s.charAt(i) - '0';}return sum;} }

    三、三羊獻(xiàn)瑞

    三羊獻(xiàn)瑞

    觀察下面的加法算式:

    ? ? ? 祥 瑞 生 輝
    ? + ? 三 羊 獻(xiàn) 瑞
    -------------------
    ? ?三 羊 生 瑞 氣

    (如果有對齊問題,可以參看【圖1.jpg】)

    圖1.jpg

    其中,相同的漢字代表相同的數(shù)字,不同的漢字代表不同的數(shù)字。

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

    【答案】:1085

    ? ? ?a b c d
    + ? e f? g b
    -------------------
    ? ? e f c b i

    e=1、a=9、f=0、c=b+1、c+g>10

    public class A03_三羊獻(xiàn)瑞 {public static void main(String[] args) {for (int b = 2; b < 9; ++b) {for (int d = 2; d < 9; ++d) {if (b == d)continue;for (int g = 2; g < 9; ++g) {if (g == b || g == d)continue;int c = b + 1;if (c == b || c == d || c == g)continue;if (c + g <= 10)continue;int sum = 9000 + b * 100 + c * 10 + d + 1000 + g * 10 + b;for (int i = 2; i < 9; ++i) {if (i == b || i == d || i == g || i == c)continue;if (sum <= (10000 + c * 100 + b * 10 + i) && sum >= (10000 + c * 100 + b * 10 + i)) {System.out.printf("%2d%d%d%d\n", 9, b, c, d);System.out.printf("%2d%d%d%d\n", 1, 0, g, b);System.out.printf("%d\n", sum);System.out.printf("---------\n");}}}}}} }

    四、循環(huán)節(jié)長度

    循環(huán)節(jié)長度

    兩個整數(shù)做除法,有時(shí)會產(chǎn)生循環(huán)小數(shù),其循環(huán)部分稱為:循環(huán)節(jié)。
    比如,11/13=6=>0.846153846153..... ?其循環(huán)節(jié)為[846153] 共有6位。
    下面的方法,可以求出循環(huán)節(jié)的長度。

    請仔細(xì)閱讀代碼,并填寫劃線部分缺少的代碼。

    ?? ?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) ?_________________________________ ; ?//填空
    ?? ??? ?}
    ?? ?}

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

    【答案】:return v.size() - v.indexOf(n)? ? ? ? ? ? ? ? ? ? ?Java Vector 類

    邏輯? ? ? ?7/18 ≈ 0.3888...? ? ? ? ? ? ? 1/3? ? ?3/10? ? 11/13 ≈ 0.846153...

    package provincialGames_06_2015;import java.util.Vector;public class A04_循環(huán)節(jié)長度 {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)return v.size() - v.indexOf(n); // 填空}}public static void main(String[] args) {System.out.println(f(11, 13));System.out.println(f(7, 18));} }

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

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

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

    下面的程序?qū)崿F(xiàn)了該功能,請?zhí)顚憚澗€部分缺失的代碼。

    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<x.length; i++){
    ?? ??? ??? ?{int t=x[k]; x[k]=x[i]; x[i]=t;}
    ?? ??? ??? ?f(x,k+1);
    ?? ??? ??? ?_______________________________________ ? ? ? // 填空
    ?? ??? ?}
    ?? ?}
    ?? ?
    ?? ?public static void main(String[] args)
    ?? ?{
    ?? ??? ?int[] x = {1,2,3,4,5,6,7,8,9};?? ??? ?
    ?? ??? ?f(x,0);
    ?? ?}
    }

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

    【答案】:{int t=x[k]; x[k]=x[i]; x[i]=t;}? ? ? ? ? ??全排列 -->?2013年 第4屆 藍(lán)橋杯 Java B組 第九題 帶分?jǐn)?shù)

    先縱后橫 --->?

    package provincialGames_06_2015;public class A05_九數(shù)組分?jǐn)?shù) {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 < x.length; i++) {{int t = x[k];x[k] = x[i];x[i] = t;}f(x, k + 1);{int t = x[k];x[k] = x[i];x[i] = t;} // 填空}}public static void main(String[] args) {int[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };f(x, 0);} }

    六、加法變乘法

    加法變乘法

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

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

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

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

    【答案】:16

    package provincialGames_06_2015;public class A06_加法變乘法 { // 簡單枚舉public static void main(String[] args) {for (int i = 1; i <= 46; i++) {for (int j = i + 2; j <= 48; j++) {if (i * (i + 1) - (i + i + 1) + j * (j + 1) - (j + j + 1) == 2015 - 1225)System.out.println(i + " " + j);}}} }

    七、牌型種數(shù)

    牌型種數(shù)

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

    請?zhí)顚懺撜麛?shù),不要填寫任何多余的內(nèi)容或說明文字。

    【答案】:3598180

    package provincialGames_06_2015_JavaB;public class A07_牌型種數(shù) {private static int ans;public static void main(String[] args) {f(0, 0);System.out.println(ans);}// 13堆牌,每堆4個, 每堆可選0到4個, 只要牌的總數(shù)為13即可// k: 哪種牌; cnt: 總共分配了幾張牌private static void f(int k, int cnt) {if (k > 13 || cnt > 13)return;if (k == 13 && cnt == 13) {ans++;return;}// cnt 每一種牌出現(xiàn)的次數(shù),cnt逐步上升// cnt==13,牌型種數(shù)+1,返回for (int i = 0; i < 5; i++) {f(k + 1, cnt + i);}} }

    八、飲料換購

    飲料換購

    樂羊羊飲料廠正在舉辦一次促銷優(yōu)惠活動。樂羊羊C型飲料,憑3個瓶蓋可以再換一瓶C型飲料,并且可以一直循環(huán)下去,但不允許賒賬。

    請你計(jì)算一下,如果小明不浪費(fèi)瓶蓋,盡量地參加活動,那么,對于他初始買入的n瓶飲料,最后他一共能得到多少瓶飲料。

    輸入:一個整數(shù)n,表示開始購買的飲料數(shù)量(0<n<10000)
    輸出:一個整數(shù),表示實(shí)際得到的飲料數(shù)

    例如:
    用戶輸入:
    100
    程序應(yīng)該輸出:
    149

    用戶輸入:
    101
    程序應(yīng)該輸出:
    151


    資源約定:
    峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
    CPU消耗 ?< 1000ms


    請嚴(yán)格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內(nèi)容。

    所有代碼放在同一個源文件中,調(diào)試通過后,拷貝提交該源碼。
    注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
    注意:主類的名字必須是:Main,否則按無效代碼處理。

    ?

    package provincialGames_06_2015_JavaB;import java.util.Scanner;public class A08_飲料換購 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int ans = 0;while (n >= 3) {n -= 2;ans += 3;}ans += n;System.out.println(ans);} }

    九、壘骰子

    壘骰子

    賭圣atm晚年迷戀上了壘骰子,就是把骰子一個壘在另一個上邊,不能歪歪扭扭,要壘成方柱體。
    經(jīng)過長期觀察,atm 發(fā)現(xiàn)了穩(wěn)定骰子的奧秘:有些數(shù)字的面貼著會互相排斥!
    我們先來規(guī)范一下骰子:1 的對面是 4,2 的對面是 5,3 的對面是 6。
    假設(shè)有 m 組互斥現(xiàn)象,每組中的那兩個數(shù)字的面緊貼在一起,骰子就不能穩(wěn)定的壘起來。 atm想計(jì)算一下有多少種不同的可能的壘骰子方式。
    兩種壘骰子方式相同,當(dāng)且僅當(dāng)這兩種方式中對應(yīng)高度的骰子的對應(yīng)數(shù)字的朝向都相同。
    由于方案數(shù)可能過多,請輸出模 10^9 + 7 的結(jié)果。

    不要小看了 atm 的骰子數(shù)量哦~

    「輸入格式」
    第一行兩個整數(shù) n m
    n表示骰子數(shù)目
    接下來 m 行,每行兩個整數(shù) a b ,表示 a 和 b 不能緊貼在一起。

    「輸出格式」
    一行一個數(shù),表示答案模 10^9 + 7 的結(jié)果。

    「樣例輸入」
    2 1
    1 2

    「樣例輸出」
    544

    「數(shù)據(jù)范圍」
    對于 30% 的數(shù)據(jù):n <= 5
    對于 60% 的數(shù)據(jù):n <= 100
    對于 100% 的數(shù)據(jù):0 < n <= 10^9, m <= 36


    資源約定:
    峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
    CPU消耗 ?< 2000ms


    請嚴(yán)格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內(nèi)容。

    所有代碼放在同一個源文件中,調(diào)試通過后,拷貝提交該源碼。
    注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
    注意:主類的名字必須是:Main,否則按無效代碼處理。

    ? ?

    矩陣乘法、矩陣快速冪

    package provincialGames_06_2015_JavaB;import java.util.Scanner;public class A09_壘骰子 {static int op[] = new int[7];private static int n;private static int m;private static final long MOD = 1000000007;static void init() {op[1] = 4;op[4] = 1;op[2] = 5;op[5] = 2;op[3] = 6;op[6] = 3;}public static void main(String[] args) {init();Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();long conflict[][] = new long[6][6];for (int i = 0; i < 6; i++) {for (int j = 0; j < 6; j++) {conflict[i][j] = 1;}}// 建立沖突矩陣for (int i = 0; i < m; i++) {int a = sc.nextInt();int b = sc.nextInt();conflict[op[a] - 1][b - 1] = 0;conflict[op[b] - 1][a - 1] = 0;}// 求沖突矩陣的n-1次方long[][] mPow_n_1 = mPow(conflict, n - 1);// 累加矩陣的每個元素long ans = 0;for (int i = 0; i < 6; i++) {for (int j = 0; j < 6; j++) {ans = (ans + mPow_n_1[i][j]) % MOD;}}// ans*4^nSystem.out.println(ans * power(4, n) % MOD);}// 快速求 i^nprivate static long power(long i, int n) {long ans = 1;while (n != 0) {if ((n & 1) == 1) { // &:位與操作符(位運(yùn)算) 【(n & 1) == 1相當(dāng)于(n % 2) == 1】ans = (ans * i) % MOD;}i = i * i % MOD;n >>= 1; // 向右移動一位}return ans;}// 矩陣的快速冪private static long[][] mPow(long[][] conflict, int n) {long[][] e = new long[6][6]; // 初始化單位矩陣for (int i = 0; i < 6; i++) {for (int j = 0; j < 6; j++) {if (i == j)e[i][j] = 1;elsee[i][j] = 0;}}while (n != 0) {if ((n & 1) == 1) {e = mMul(e, conflict);}conflict = mMul(conflict, conflict);n >>= 1;}return e;}// 矩陣乘法private static long[][] mMul(long[][] a, long[][] b) {long[][] ans = new long[6][6];for (int i = 0; i < 6; i++) {for (int j = 0; j < 6; j++) {for (int k = 0; k < 6; k++) {ans[i][j] = (ans[i][j] + a[i][k] * b[k][j]) % MOD;}}}return ans;} }

    位運(yùn)算 快速求 i^n

    package provincialGames_06_2015_JavaB;public class A09_位運(yùn)算快速求冪 {public static void main(String[] args) {System.out.println(power(1, 5)); // 1System.out.println(power(2, 5)); // 32System.out.println(power(5, 3)); // 125int n = 5;System.out.println(n >>= 1); // 2System.out.println(System.nanoTime()); // 納秒long factor = 1;for (int i = 0; i < 10; i++) { // 求2^10factor <<= 1;}System.out.println(factor); // 1024}private static long power(long i, int n) {long ans = 1;while (n != 0) {if ((n & 1) == 1) { // &:位與操作符(位運(yùn)算) 【(n & 1) == 1相當(dāng)于(n % 2) == 1】ans *= i; // ans = (ans * i)}i *= i;n >>= 1; // 向右移動一位}return ans;} }

    十、生命之樹

    生命之樹

    在X森林里,上帝創(chuàng)建了生命之樹。

    他給每棵樹的每個節(jié)點(diǎn)(葉子也稱為一個節(jié)點(diǎn))上,都標(biāo)了一個整數(shù),代表這個點(diǎn)的和諧值。
    上帝要在這棵樹內(nèi)選出一個非空節(jié)點(diǎn)集S,使得對于S中的任意兩個點(diǎn)a,b,都存在一個點(diǎn)列 {a, v1, v2, ..., vk, b} 使得這個點(diǎn)列中的每個點(diǎn)都是S里面的元素,且序列中相鄰兩個點(diǎn)間有一條邊相連。

    在這個前提下,上帝要使得S中的點(diǎn)所對應(yīng)的整數(shù)的和盡量大。
    這個最大的和就是上帝給生命之樹的評分。

    經(jīng)過atm的努力,他已經(jīng)知道了上帝給每棵樹上每個節(jié)點(diǎn)上的整數(shù)。但是由于 atm 不擅長計(jì)算,他不知道怎樣有效的求評分。他需要你為他寫一個程序來計(jì)算一棵樹的分?jǐn)?shù)。

    「輸入格式」
    第一行一個整數(shù) n 表示這棵樹有 n 個節(jié)點(diǎn)。
    第二行 n 個整數(shù),依次表示每個節(jié)點(diǎn)的評分。
    接下來 n-1 行,每行 2 個整數(shù) u, v,表示存在一條 u 到 v 的邊。由于這是一棵樹,所以是不存在環(huán)的。

    「輸出格式」
    輸出一行一個數(shù),表示上帝給這棵樹的分?jǐn)?shù)。

    「樣例輸入」
    5
    1 -2 -3 4 5
    4 2
    3 1
    1 2
    2 5

    「樣例輸出」
    8

    「數(shù)據(jù)范圍」
    對于 30% 的數(shù)據(jù),n <= 10
    對于 100% 的數(shù)據(jù),0 < n <= 10^5, 每個節(jié)點(diǎn)的評分的絕對值不超過 10^6 。

    資源約定:
    峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
    CPU消耗 ?< 3000ms


    請嚴(yán)格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內(nèi)容。

    所有代碼放在同一個源文件中,調(diào)試通過后,拷貝提交該源碼。
    注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
    注意:主類的名字必須是:Main,否則按無效代碼處理。

    ?

    package provincialGames_06_2015_JavaB;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException;import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class A10_生命之樹 {private static int n;private static long[] w;private static List<Integer>[] g;private static long ans; // List<Integer>[] x = new ArrayList[n+1];public static void main(String[] args) throws FileNotFoundException {// System.setIn(new FileInputStream(new File("...")));// F:/Java/eclipse/workspace/zLanQiao/src/provincialGames_06_2015/data10/in4.txt// in4.txt 正常運(yùn)行;in5.txt 棧溢出// /Users/zhengwei/workspace/lanqiaobei2019/src/2015_Java_B/data10/in5.txtScanner sc = new Scanner(System.in);n = sc.nextInt();w = new long[n + 1];g = new ArrayList[n + 1];initG();for (int i = 1; i <= n; i++) {w[i] = sc.nextLong();}for (int i = 0; i < n - 1; i++) {int a = sc.nextInt();int b = sc.nextInt();g[a].add(b); // 無向的鄰接表 雙向g[b].add(a); // 有向圖 例外}dfs(1, 0);System.out.println(ans);}// u作為根所代表的子樹有一個最大權(quán)和,將其存儲在w[u]中private static void dfs(int u, int fa) {for (int i = 0; i < g[u].size(); i++) {Integer child = g[u].get(i);if (child == fa)continue;dfs(child, u);if (w[child] > 0)w[u] += w[child];}if (w[u] > ans)ans = w[u];}// 鄰接表 在Java中,一般用List來做, 數(shù)組List<Integer>[] g = new ArrayList[n+1];// 對象數(shù)組,只對 對象 進(jìn)行了 初始化, 還需要 對 數(shù)組元素 進(jìn)行初始化private static void initG() {for (int i = 0; i < n + 1; i++) {g[i] = new ArrayList<Integer>();}} }

    小結(jié)

    01 三角形面積 熱身 不用編程
    02 立方變自身 簡單枚舉
    03 三羊獻(xiàn)瑞 簡單枚舉 小技巧
    *04 循環(huán)節(jié)長度 有坑 邏輯
    05 九數(shù)組分?jǐn)?shù) 全排列 帶分?jǐn)?shù)
    06 加法變乘法 簡單枚舉 小技巧
    07 牌型種數(shù) 遞歸
    08 飲料換購 模擬
    ****09 壘骰子 遞歸-動規(guī)-矩陣快速冪
    10 生命之樹 Java中遞歸最多1萬層

    總結(jié)

    以上是生活随笔為你收集整理的2015年 第6届 蓝桥杯 Java B组 省赛解析及总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。