第八屆藍(lán)橋杯省賽JavaC組真題——詳細(xì)答案對(duì)照(完整版)

      網(wǎng)友投稿 881 2022-05-30

      目錄

      A、外星日歷

      B、興趣小組

      C、紙牌三角形

      D、承壓計(jì)算

      E、楊輝三角(填空)

      F、最大公共子串

      G、Excle地址

      H、拉馬車

      I、青蛙跳杯子

      J、圖形排版

      A、外星日歷

      某星系深處發(fā)現(xiàn)了文明遺跡。

      他們的計(jì)數(shù)也是用十進(jìn)制。

      他們的文明也有日歷。日歷只有天數(shù),沒有年、月的概念。

      有趣的是,他們也使用了類似“星期”的概念,

      只不過他們的一個(gè)星期包含了9天,

      為了方便,這里分別記為: A,B,C....H,I

      從一些資料上看到,

      他們的23日是星期E

      他們的190日是星期A

      他們的343251日是星期I

      令人興奮的是,他們居然也預(yù)見了“世界末日”的那天,

      當(dāng)然是一個(gè)很大很大的數(shù)字

      651764141421415346185

      請(qǐng)你計(jì)算一下,這遙遠(yuǎn)的一天是該文明的星期幾?

      你需要提交的是一個(gè)大寫字母,表示該文明的星期幾,

      不要填寫任何多余的內(nèi)容。

      題解:

      package action; import java.math.BigInteger; public class demo { public static void main(String[] args) { BigInteger x = new BigInteger("651764141421415346185"); BigInteger y = x.mod(new BigInteger("9")); int z = y.intValue(); System.out.println((char)('A'+z-1)); } }

      B、興趣小組

      為豐富同學(xué)們的業(yè)余文化生活,某高校學(xué)生會(huì)創(chuàng)辦了3個(gè)興趣小組

      (以下稱A組,B組,C組)。

      每個(gè)小組的學(xué)生名單分別在【A.txt】,【B.txt】和【C.txt】中。

      每個(gè)文件中存儲(chǔ)的是學(xué)生的學(xué)號(hào)。

      由于工作需要,我們現(xiàn)在想知道:

      既參加了A組,又參加了B組,但是沒有參加C組的同學(xué)一共有多少人?

      請(qǐng)你統(tǒng)計(jì)該數(shù)字并通過瀏覽器提交答案。

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

      題解:

      package action; public class demo { public static void main(String[] args) { int[] a = { 12894792, 92774113, 59529208, 22962224, 2991600, 83340521, 87365045, 40818286, 16400628, 39475245, 55933381, 76940287, 61366748, 95631228, 17102313, 50682833, 61562613, 87002524, 83062019, 51743442, 61977890, 32010762, 69680621, 87179571, 81761697, 32364296, 7833271, 36198035, 26588918, 84046668, 43059468, 73191775, 56794101, 454780, 11141030, 10008994, 35072237, 44945158, 53959980, 75758119, 18560273, 35801494, 42102550, 22496415, 3981786, 34593672, 13074905, 07733442, 42374678, 23452507, 98586743, 30771281, 17703080, 52123562, 5898131, 56698981, 90758589, 18238802, 18217979, 4511837, 75682969, 31135682, 55379006, 42224598, 98263070, 40228312, 28924663, 11580163, 25686441, 45944028, 96731602, 53675990, 3854194, 14858183, 16866794, 40677007, 73141512, 32317341, 56641725, 43123040, 15201174, 62389950, 72887083, 76860787, 61046319, 6923746, 17874548, 46028629, 10577743, 48747364, 5328780, 59855415, 60965266, 20592606, 14471207, 70896866, 46938647, 33575820, 53426294, 56093931, 51326542, 94050481, 80114017, 33010503, 72971538, 22407422, 17305672, 78974338, 93209260, 83461794, 41247821, 26118061, 10657376, 42198057, 15338224, 50284714, 32232841, 26716521, 76048344, 23676625, 62897700, 69296551, 59653393, 38704390, 48481614, 69782897, 26850668, 37471053, 88720989, 51010849, 94951571, 60024611, 29808329, 70377786, 13899299, 9683688, 58218284, 46792829, 97221709, 45286643, 48158629, 57367208, 26903401, 76900414, 87927040, 9926730, 1508757, 15101101, 62491840, 43802529 }; int[] b = { 44894050, 34662733, 44141729, 92774113, 99208727, 91919833, 23727681, 10003409, 55933381, 54443275, 13584702, 96523685, 50682833, 61562613, 62380975, 20311684, 93200452, 23101945, 42192880, 28992561, 18460278, 19186537, 58465301, 01111066, 62680429, 23721241, 20277631, 91708977, 57514737, 3981786, 81541612, 07346443, 93154608, 19709455, 37446968, 17703080, 72378958, 66200696, 30610382, 89586343, 33152171, 67040930, 35696683, 63242065, 99948221, 96233367, 52593493, 98263070, 1418023, 74816705, 89375940, 58405334, 96731602, 84089545, 16866794, 94737626, 01673442, 70548494, 13638168, 8163691, 11106566, 64375392, 40267902, 897705, 56447313, 54532235, 94738425, 66642634, 83219544, 40546096, 66924991, 20592606, 96037590, 73434467, 70896866, 91025618, 57892091, 8487641, 32500082, 84412833, 23311447, 38380409, 79957822, 72971538, 69645784, 91863314, 73099909, 93209260, 83461794, 81378487, 30423273, 22233715, 32232841, 26716521, 03511221, 29196547, 58263562, 56233305, 52547525, 55812835, 87253244, 52484232, 80837360, 94098464, 52028151, 53267501, 66381929, 84381316, 59788467, 9683688, 67082008, 71605255, 80654064, 21434307, 45286643, 76556656, 82465821, 57367208, 79218980, 48460468, 59170479, 46046391, 43043164, 96544490, 83340521, 70837892, 18926791, 40818286, 28936302, 11489524, 51031183, 73860337, 13241219, 9025448, 10718828, 76360986, 26031606, 76558053, 97726139, 46473415, 48406387, 23625539, 86756012, 35164187, 49161302, 78082834, 35072237, 8602486, 29815841, 56562216, 77684187, 81751704, 20160464, 50407962, 27786415, 19893526, 934129, 37759498, 52636463, 25666982, 43262852, 38393436, 2581136, 29323250, 56950657, 5898131, 95286262, 75574581, 54057961, 6703896, 90758589, 57782642, 34492535, 41919697, 6395464, 10993500, 81212949, 34017532, 69569396, 99009936, 57129610, 67401593, 71044018, 62076698, 29533873, 71936325, 86874388, 26545032, 35695544, 30433724, 53127345, 72887083, 25390873, 63711546, 6923746, 27783723, 33199575, 35929698, 16491251, 18276792, 62744775, 92096155, 06336570, 56141974, 73007273, 31416832, 00171057, 64176982, 46938647, 58460388, 69972026, 73724304, 27435484, 51568616, 15531822, 47788699, 11818851, 41594694, 83561325, 43107163, 56965375, 10557343, 26118061, 74650126, 90076467, 10657376, 49901436, 03425162, 61164599, 15797769, 5427896, 14444084, 36795868, 18079449, 59653393, 72942548, 06763077, 33895610, 94892653, 12085268, 65174140, 79567366, 23020126, 74290047, 13498869, 21696323, 27724594, 54941003, 38229841, 7050068 }; int[] c = { 13404901, 39952424, 47847739, 94939581, 13809950, 70966043, 11161555, 17102313, 47079425, 50682833, 74154313, 61562613, 93200452, 37103342, 18479435, 32502597, 36198035, 54210010, 73191775, 48358178, 85544503, 5996766, 54651623, 52113220, 27465181, 23871783, 22496415, 54107041, 65899605, 56528700, 82671109, 61176034, 42374678, 51612628, 63329997, 56591652, 04552733, 12789324, 89586343, 51935014, 38611966, 43916409, 70996050, 98263070, 1418023, 65345049, 21734275, 76846198, 71506230, 833171, 67128139, 41367555, 64769510, 44010700, 16475199, 93164325, 9386162, 95324041, 80688223, 67629139, 79552617, 76219736, 50368644, 45096021, 54972488, 63779011, 28862942, 73145521, 74078605, 66924991, 12806850, 02171001, 70896866, 73434467, 8487641, 44415025, 32500082, 84412833, 83896188, 52243759, 49191410, 38744339, 48079796, 44937032, 06267501, 81866886, 38575984, 25978688, 78974338, 41247821, 12356966, 64842303, 79127158, 2366944, 68000570, 12426275, 96409230, 705972, 8266503, 83820884, 8831807, 43273308, 23216105, 29196547, 95160161, 05553537, 52182214, 32641346, 91553427, 24436506, 77433749, 1979664, 52028151, 88985343, 1761499, 76203088, 63237368, 23405334, 59788467, 9683688, 67755443, 29946533, 12053603, 437479, 15200030, 45286643, 93537527, 82465821, 57367208, 53899751, 15354933, 97760830, 68933762, 80220545, 1892750, 39868288, 21524323, 69716610, 65083815, 78048499, 3227391, 83340521, 87365045, 71720254, 51031183, 89168555, 8503028, 37086236, 25103057, 87002524, 22808816, 80928090, 90741678, 15993372, 99117082, 49938176, 21755083, 86903426, 87830263, 53959980, 75758119, 59781354, 58679691, 25666982, 56307643, 47180521, 62776522, 78136608, 44882734, 90758589, 8075999, 66303819, 23480347, 11580163, 87080118, 18329165, 92514163, 89404632, 92377859, 3912329, 17499963, 59699979, 79876366, 63894807, 37857001, 86003935, 90087123, 29433345, 80298948, 61531153, 61046319, 37839841, 19421134, 48747364, 35196916, 62484573, 59907079, 36845702, 21631642, 72739317, 26283700, 80114017, 76639390, 29154110, 35159758, 47788699, 11818851, 56520669, 36396767, 36031167, 83817428, 10657376, 90076467, 14676452, 11024560, 16327605, 76048344, 14444084, 95452011, 99612346, 65172562, 84813675, 88618282, 38704390, 27998014, 63859011, 33787505, 60024611, 16229880, 13899299, 35240335, 29173227, 45036451, 66177893, 82658333, 43100730, 44520187, 74290047, 85013538, 9926730, 27724594, 95148523, 20503000, 64390907, 26006953, 98116293, 97457666, 29017396, 04634371, 70791589 }; // 參加a,參加b ,沒有參加c // 即 數(shù)組ab有c沒有的數(shù)字 int [] temp = new int [a.length]; int num = 0; for (int i = 0; i < a.length; i++) { for (int j = 0; j < b.length; j++) { if (a[i] == b[j]) { temp[num] = a[i]; System.out.println(temp[num]); num++; } } } for (int i = 0; i < temp.length; i++) { for (int j = 0; j < c.length; j++) { if (temp[i] == c[j]) { num--; } } } System.out.println(num); } }

      C、紙牌三角形

      A,2,3,4,5,6,7,8,9 共9張紙牌排成一個(gè)正三角形(A按1計(jì)算)。要求每個(gè)邊的和相等。

      下圖就是一種排法:

      A

      9 6

      4 ? 8

      3 7 5 2

      這樣的排法可能會(huì)有很多。

      如果考慮旋轉(zhuǎn)、鏡像后相同的算同一種,一共有多少種不同的排法呢?

      請(qǐng)你計(jì)算并提交該數(shù)字。

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

      題解:

      package action; public class demo { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; dfs(arr, 0, arr.length); System.out.println(count / 6); } static int count = 0; public static void dfs(int[] arr, int k, int end) { // 結(jié)束條件 if (k == end) { int x = arr[0] + arr[1] + arr[2] + arr[3]; int y = arr[3] + arr[4] + arr[5] + arr[6]; int z = arr[6] + arr[7] + arr[8] + arr[0]; if (x == y && x == z) { count++; } return; } for (int i = k; i < end; i++) { int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; dfs(arr, k + 1, end); temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } }

      D、承壓計(jì)算

      X星球的高科技實(shí)驗(yàn)室中整齊地堆放著某批珍貴金屬原料。

      每塊金屬原料的外形、尺寸完全一致,但重量不同。

      金屬材料被嚴(yán)格地堆放成金字塔形。

      7

      5 8

      7 8 8

      9 2 7 2

      8 1 4 9 1

      8 1 8 8 4 1

      7 9 6 1 4 5 4

      5 6 5 5 6 9 5 6

      5 5 4 7 9 3 5 5 1

      7 5 7 9 7 4 7 3 3 1

      4 6 4 5 5 8 8 3 2 4 3

      1 1 3 3 1 6 6 5 5 4 4 2

      9 9 9 2 1 9 1 9 2 9 5 7 9

      4 3 3 7 7 9 3 6 1 3 8 8 3 7

      3 6 8 1 5 3 9 5 8 3 8 1 8 3 3

      8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9

      8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4

      2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9

      7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6

      9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3

      5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9

      6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4

      2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4

      7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6

      1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3

      2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8

      7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9

      7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6

      5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1

      X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X

      其中的數(shù)字代表金屬塊的重量(計(jì)量單位較大)。

      最下一層的X代表30臺(tái)極高精度的電子秤。

      假設(shè)每塊原料的重量都十分精確地平均落在下方的兩個(gè)金屬塊上,

      最后,所有的金屬塊的重量都嚴(yán)格精確地平分落在最底層的電子秤上。

      電子秤的計(jì)量單位很小,所以顯示的數(shù)字很大。

      工作人員發(fā)現(xiàn),其中讀數(shù)最小的電子秤的示數(shù)為:2086458231

      請(qǐng)你推算出:讀數(shù)最大的電子秤的示數(shù)為多少?

      第八屆藍(lán)橋杯省賽JavaC組真題——詳細(xì)答案對(duì)照(完整版)

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

      題解:

      package action; import java.util.Scanner; public class demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double [][] num = new double[30][30]; for (int i = 0; i < num.length - 1; i++) { for (int j = 0; j <= i; j++) { num[i][j] = sc.nextDouble(); } } for (int i = 1; i < num.length; i++) { for (int j = 0; j <= i; j++) { if (j == 0) { // 每一行第一個(gè) num[i][j] += num[i-1][j]/2; } else if (j == i) { // 這一行最后一個(gè) num[i][j] += num[i-1][j-1]/2; } else { num[i][j] += num[i-1][j-1]/2 + num[i-1][j]/2; } } } for (int i = 0; i < 30; i++) { for (int j = 0; j <= i; j++) { System.out.print(num[i][j]+" "); } System.out.println(); } // 找第30行的最大值和最小值 double min = 100000; double max = 0; for (int i = 0; i < num[29].length; i++) { if (num[29][i] > max) { max = num[29][i]; } if (num[29][i] < min) { min = num[29][i]; } } long ans = (long) (2086458231/min * max); System.out.println(ans); } }

      E、楊輝三角(填空)

      楊輝三角也叫帕斯卡三角,在很多數(shù)量關(guān)系中可以看到,十分重要。

      第0行: ? ? ? ? ? 1

      第1行: ? ? ? ? ?1 1

      第2行: ? ? ? ? 1 2 1

      第3行: ? ? ? ?1 3 3 1

      第4行: ? ? ? 1 4 6 4 1

      ....

      兩邊的元素都是1, 中間的元素是左上角的元素與右上角的元素和。

      我們約定,行號(hào),列號(hào)都從0計(jì)數(shù)。

      所以: 第6行的第2個(gè)元素是15,第3個(gè)元素是20

      直觀地看,需要開辟一個(gè)二維數(shù)組,其實(shí)一維數(shù)組也可以勝任。

      如下程序就是用一維數(shù)組“騰挪”的解法。

      public class A

      {

      // 楊輝三角形的第row行第col列

      static long f(int row, int col){

      if(row<2) return 1;

      if(col==0) return 1;

      if(col==row) return 1;

      long[] a = new long[row+1];

      a[0]=1;

      a[1]=1;

      int p = 2;

      while(p<=row){

      a[p] = 1;

      for( __________________ ) a[q] = a[q] + a[q-1];

      p++;

      }

      return a[col];

      }

      public static void main(String[] args){

      System.out.println(f(6,2));

      System.out.println(f(6,3));

      }

      }

      請(qǐng)仔細(xì)分析源碼,并完成劃線部分缺少的代碼。

      注意:只提交缺少的代碼,不要提交已有的代碼和符號(hào)。也不要提交說明性文字。

      題解:

      package action; public class demo { // 楊輝三角形的第row行第col列 static long f(int row, int col){ if(row<2) return 1; // 前兩行都為1 if(col==0) return 1; // 每一行第一個(gè)為1 if(col==row) return 1; // 每一行最后一個(gè)為1 long[] a = new long[row+1]; // 存儲(chǔ)每一行數(shù)據(jù)的數(shù)組 a[0]=1; // 這個(gè)可以看成第一行的第一個(gè)值和第二個(gè)值 , 等的下一行的時(shí)候,這個(gè)就跟著變了 a[1]=1; int p = 2; // 行數(shù) while(p<=row){ a[p] = 1; // 這一行最后一個(gè)數(shù)為1 for(int q = p - 1;q > 0 ;q--){ a[q] = a[q] + a[q-1]; // 這個(gè)其實(shí)也是也調(diào)用上一行的數(shù)據(jù) } p++; // 下一行 } return a[col]; // 返回這一行對(duì)應(yīng)的列值 } public static void main(String[] args){ System.out.println(f(6,2)); System.out.println(f(6,3)); } }

      F、最大公共子串

      最大公共子串就是求兩個(gè)串的所有子串中能夠匹配上的最大長(zhǎng)度是多少。

      比如:"abcdkkk" 和 "baabcdadabc",

      可以找到的最長(zhǎng)的公共子串是"abcd",所以最大公共子串長(zhǎng)度為4。

      下面的程序是采用矩陣法進(jìn)行求解的,這對(duì)串的規(guī)模不大的情況還是比較有效的解法。

      請(qǐng)分析該解法的思路,并補(bǔ)全劃線部分缺失的代碼。

      public class A

      {

      static int f(String s1, String s2)

      {

      char[] c1 = s1.toCharArray();

      char[] c2 = s2.toCharArray();

      int[][] a = new int[c1.length+1][c2.length+1];

      int max = 0;

      for(int i=1; i

      for(int j=1; j

      if(c1[i-1]==c2[j-1]) {

      a[i][j] = _______________________ ; //填空

      if(a[i][j] > max) max = a[i][j];

      }

      }

      }

      return max;

      }

      public static void main(String[] args){

      int n = f("abcdkkk", "baabcdadabc");

      System.out.println(n);

      }

      }

      注意:只提交缺少的代碼,不要提交已有的代碼和符號(hào)。也不要提交說明性文字。

      題解:

      package action; public class demo { static int f(String s1, String s2) { // 將兩個(gè)字符串切割成字符數(shù)組 char[] c1 = s1.toCharArray(); char[] c2 = s2.toCharArray(); int[][] a = new int[c1.length+1][c2.length+1]; int max = 0; for(int i=1; i max) max = a[i][j]; // 替換最大公共子串 } } } return max; } public static void main(String[] args){ int n = f("abcdkkk", "baabcdadabc"); System.out.println(n); } }

      G、Excle地址

      Excel單元格的地址表示很有趣,它使用字母來表示列號(hào)。

      比如,

      A表示第1列,

      B表示第2列,

      Z表示第26列,

      AA表示第27列,

      AB表示第28列,

      BA表示第53列,

      ....

      當(dāng)然Excel的最大列號(hào)是有限度的,所以轉(zhuǎn)換起來不難。

      如果我們想把這種表示法一般化,可以把很大的數(shù)字轉(zhuǎn)換為很長(zhǎng)的字母序列呢?

      本題目既是要求對(duì)輸入的數(shù)字, 輸出其對(duì)應(yīng)的Excel地址表示方式。

      例如,

      輸入:

      26

      則程序應(yīng)該輸出:

      Z

      再例如,

      輸入:

      2054

      則程序應(yīng)該輸出:

      BZZ

      我們約定,輸入的整數(shù)范圍[1,2147483647]

      資源約定:

      峰值內(nèi)存消耗(含虛擬機(jī)) < 256M

      CPU消耗 ?< 1000ms

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

      所有代碼放在同一個(gè)源文件中,調(diào)試通過后,拷貝提交該源碼。

      不要使用package語(yǔ)句。不要使用jdk1.7及以上版本的特性。

      主類的名字必須是:Main,否則按無效代碼處理。

      題解:

      package action; import java.util.Scanner; public class demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int [] litter = new int[10]; // 位數(shù)存儲(chǔ)值 int n = sc.nextInt(); int num = 1; // 第幾位 while (n != 0) { if (n % 26 == 0) { // 能除盡,即為z litter[num] = 26 + 64; // 65是A n -= 1; } else { litter[num] = n % 26 + 64; } n /= 26; num++; } // 倒敘打印 for (int i = num - 1; i > 0; i--) { System.out.print((char)litter[i]); } } }

      H、拉馬車

      小的時(shí)候,你玩過紙牌游戲嗎?

      有一種叫做“拉馬車”的游戲,規(guī)則很簡(jiǎn)單,卻很吸引小朋友。

      其規(guī)則簡(jiǎn)述如下:

      假設(shè)參加游戲的小朋友是A和B,游戲開始的時(shí)候,他們得到的隨機(jī)的紙牌序列如下:

      A方:[K, 8, X, K, A, 2, A, 9, 5, A]

      B方:[2, 7, K, 5, J, 5, Q, 6, K, 4]

      其中的X表示“10”,我們忽略了紙牌的花色。

      從A方開始,A、B雙方輪流出牌。

      當(dāng)輪到某一方出牌時(shí),他從自己的紙牌隊(duì)列的頭部拿走一張,放到桌上,并且壓在最上面一張紙牌上(如果有的話)。

      此例中,游戲過程:

      A出K,B出2,A出8,B出7,A出X,此時(shí)桌上的序列為:

      K,2,8,7,X

      當(dāng)輪到B出牌時(shí),他的牌K與桌上的紙牌序列中的K相同,則把包括K在內(nèi)的以及兩個(gè)K之間的紙牌都贏回來,放入自己牌的隊(duì)尾。注意:為了操作方便,放入牌的順序是與桌上的順序相反的。

      此時(shí),A、B雙方的手里牌為:

      A方:[K, A, 2, A, 9, 5, A]

      B方:[5, J, 5, Q, 6, K, 4, K, X, 7, 8, 2, K]

      贏牌的一方繼續(xù)出牌。也就是B接著出5,A出K,B出J,A出A,B出5,又贏牌了。

      5,K,J,A,5

      此時(shí)雙方手里牌:

      A方:[2, A, 9, 5, A]

      B方:[Q, 6, K, 4, K, X, 7, 8, 2, K, 5, A, J, K, 5]

      注意:更多的時(shí)候贏牌的一方并不能把桌上的牌都贏走,而是拿走相同牌點(diǎn)及其中間的部分。但無論如何,都是贏牌的一方繼續(xù)出牌,有的時(shí)候剛一出牌又贏了,也是允許的。

      當(dāng)某一方出掉手里最后一張牌,但無法從桌面上贏取牌時(shí),游戲立即結(jié)束。

      對(duì)于本例的初始手牌情況下,最后A會(huì)輸?shù)簦鳥最后的手里牌為:

      9K2A62KAX58K57KJ5

      本題的任務(wù)就是已知雙方初始牌序,計(jì)算游戲結(jié)束時(shí),贏的一方手里的牌序。當(dāng)游戲無法結(jié)束時(shí),輸出-1。

      輸入為2行,2個(gè)串,分別表示A、B雙方初始手里的牌序列。

      輸出為1行,1個(gè)串,表示A先出牌,最后贏的一方手里的牌序。

      例如,

      輸入:

      96J5A898QA

      6278A7Q973

      則程序應(yīng)該輸出:

      2J9A7QA6Q6889977

      再比如,

      輸入:

      25663K6X7448

      J88A5KJXX45A

      則程序應(yīng)該輸出:

      6KAJ458KXAX885XJ645

      我們約定,輸入的串的長(zhǎng)度不超過30

      資源約定:

      峰值內(nèi)存消耗(含虛擬機(jī)) < 256M

      CPU消耗 ?< 1000ms

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

      所有代碼放在同一個(gè)源文件中,調(diào)試通過后,拷貝提交該源碼。

      不要使用package語(yǔ)句。不要使用jdk1.7及以上版本的特性。

      主類的名字必須是:Main,否則按無效代碼處理。

      題解:

      package action; import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; public class demo { static char temp; static boolean ok = true; static boolean flag = true; static ArrayList a = new ArrayList(); static ArrayList b = new ArrayList(); static ArrayList onging = new ArrayList(); public static void main(String[] args) { String str; Scanner input = new Scanner(System.in); // 輸入 str = input.next(); for (char cha : str.toCharArray()) { a.add(cha); } str = input.next(); for (char cha : str.toCharArray()) { b.add(cha); } input.close(); // 執(zhí)行 // true就是繼續(xù)出牌,false就是有沒排的 while (ok) { // flag是我兩個(gè)人切換的關(guān)鍵點(diǎn) if (flag) { ok = underway(a, onging); if (ok) { flag = sourse(flag, a, onging); } } else { ok = underway(b, onging); if (ok) { flag = sourse(flag, b, onging); } } } // 打印 if (flag) { Iterator it = b.iterator(); while (it.hasNext()) { System.out.print(it.next()); } } else { Iterator it = a.iterator(); while (it.hasNext()) { System.out.print(it.next()); } } } // 出牌 public static boolean underway(ArrayList x, ArrayList onging) { temp = x.remove(0); onging.add(temp); // 如果其中一方?jīng)]牌或者出現(xiàn)一次可贏局面(可以拿走牌的情況) if (x.size() == 0 && onging.lastIndexOf(temp) == onging.indexOf(temp)) { return false; } return true; } // 每一次出牌后我都需要驗(yàn)證 public static boolean sourse(boolean flag, ArrayList x, ArrayList onging) { if (onging.size() != 0) { // temp出現(xiàn)的位置更新說明,又出現(xiàn)了一個(gè)temp,取牌后繼續(xù)執(zhí)行;反之,沒有出現(xiàn)相同的,下個(gè)人執(zhí)行 if (onging.lastIndexOf(temp) == onging.indexOf(temp)) { return !flag; } int end = onging.indexOf(temp) - 1; // 將lastIndex---Index中間的添加到x中,同時(shí)從ongoing中移出 while (onging.size() - 1 != end) { int onMax = onging.size() - 1; x.add(onging.get(onMax)); onging.remove(onMax); } } return flag; } }

      I、青蛙跳杯子

      X星球的流行寵物是青蛙,一般有兩種顏色:白色和黑色。

      X星球的居民喜歡把它們放在一排茶杯里,這樣可以觀察它們跳來跳去。

      如下圖,有一排杯子,左邊的一個(gè)是空著的,右邊的杯子,每個(gè)里邊有一只青蛙。

      *WWWBBB

      其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。

      X星的青蛙很有些癖好,它們只做3個(gè)動(dòng)作之一:

      1. 跳到相鄰的空杯子里。

      2. 隔著1只其它的青蛙(隨便什么顏色)跳到空杯子里。

      3. 隔著2只其它的青蛙(隨便什么顏色)跳到空杯子里。

      對(duì)于上圖的局面,只要1步,就可跳成下圖局面:

      WWW*BBB

      本題的任務(wù)就是已知初始局面,詢問至少需要幾步,才能跳成另一個(gè)目標(biāo)局面。

      輸入為2行,2個(gè)串,表示初始局面和目標(biāo)局面。

      輸出要求為一個(gè)整數(shù),表示至少需要多少步的青蛙跳。

      例如:

      輸入:

      *WWBB

      WWBB*

      則程序應(yīng)該輸出:

      2

      再例如,

      輸入:

      WWW*BBB

      BBB*WWW

      則程序應(yīng)該輸出:

      10

      我們約定,輸入的串的長(zhǎng)度不超過15

      資源約定:

      峰值內(nèi)存消耗(含虛擬機(jī)) < 256M

      CPU消耗 ?< 1000ms

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

      所有代碼放在同一個(gè)源文件中,調(diào)試通過后,拷貝提交該源碼。

      不要使用package語(yǔ)句。不要使用jdk1.7及以上版本的特性。

      主類的名字必須是:Main,否則按無效代碼處理。

      題解視頻:

      JavaC組第八屆第九題青蛙跳杯子_嗶哩嗶哩_bilibili

      題解:

      package action; import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Set; public class demo { static String start; static String end; static Queue q = new LinkedList<>(); static Set set = new HashSet<>();// 過濾紙重復(fù)的隊(duì)列模式 static int[] dir = { 1, 2, 3, -1, -2, -3 };// 六種狀態(tài),-3表示向左邊跳三個(gè)距離 public static String swap(int a, int b, String str) {// 交換str中 a、b 兩處的字符 char cs[] = str.toCharArray(); char temp = cs[a]; cs[a] = cs[b]; cs[b] = temp; str = new String(cs); return str; } public static int bfs(String now, int pos, int step) { q.add(new State(now, pos, step)); while (!q.isEmpty()) { State curState = q.poll(); if (curState.pattern.equals(end)) return curState.step; if (set.contains(curState.pattern)) { continue; } else { set.add(curState.pattern); } for (int i = 0; i < dir.length; i++) {// 六個(gè)狀態(tài) int nextPos = curState.pos + dir[i];// 下一個(gè)空杯的位置 if (nextPos < curState.pattern.length() && nextPos >= 0) {// 得在合法的位置 String temp = curState.pattern;// 記錄當(dāng)前的隊(duì)列狀態(tài) String nextPattern = swap(curState.pos, nextPos, temp);// 交換,產(chǎn)生新的隊(duì)列模式 State nextState = new State(nextPattern, nextPos, curState.step + 1); if (!set.contains(nextPattern)) q.add(nextState); } } } return -1; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); start = sc.nextLine(); end = sc.nextLine(); sc.close(); int pos = 0; for (int i = 0; i < start.length(); i++) { if (start.charAt(i) == '*') { pos = i; break; } } System.out.println(bfs(start, pos, 0)); } } class State { String pattern;// 當(dāng)前隊(duì)列模式 int pos;// * 所在的索引 int step;// 從初始隊(duì)列模式到當(dāng)前隊(duì)列模式經(jīng)過的步數(shù) public State(String now, int pos, int step) { this.pattern = now; this.pos = pos; this.step = step; } }

      J、圖形排版

      小明需要在一篇文檔中加入 N 張圖片,其中第 i 張圖片的寬度是 Wi,高度是 Hi。

      假設(shè)紙張的寬度是 M,小明使用的文檔編輯工具會(huì)用以下方式對(duì)圖片進(jìn)行自動(dòng)排版:

      1. 該工具會(huì)按照?qǐng)D片順序,在寬度 M 以內(nèi),將盡可能多的圖片排在一行。該行的高度是行內(nèi)最高的圖片的高度。

      例如在 M=10 的紙張上依次打印 3x4, 2x2, 3x3 三張圖片,則效果如下圖所示,這一行高度為4。

      (分割線以上為列標(biāo)尺,分割線以下為排版區(qū)域;數(shù)字組成的矩形為第x張圖片占用的版面)

      0123456789

      ----------

      111

      111 ?333

      11122333

      11122333

      2. 如果當(dāng)前行剩余寬度大于0,并且小于下一張圖片,則下一張圖片會(huì)按比例縮放到寬度為當(dāng)前行剩余寬度(高度向?? ?上取整),然后放入當(dāng)前行。例如再放入一張4x9的圖片,由于剩余寬度是2,這張圖片會(huì)被壓縮到2x5,再被放入第一行的末尾。此時(shí)該行高度為5:

      0123456789

      ----------

      44

      111 ? ? 44

      111 ?33344

      1112233344

      1112233344

      3. 如果當(dāng)前行剩余寬度為0,該工具會(huì)從下一行開始繼續(xù)對(duì)剩余的圖片進(jìn)行排版,直到所有圖片都處理完畢。此時(shí)所有行的總高度和就是這 N 張圖片的排版高度。例如再放入11x1, 5x5, 3x4 的圖片后,效果如下圖所示,總高度為11:

      0123456789

      ----------

      44

      111 ? ? 44

      111 ?33344

      1112233344

      1112233344

      5555555555

      66666

      66666777

      66666777

      66666777

      66666777

      現(xiàn)在由于排版高度過高,圖片的先后順序也不能改變,小明只好從 N 張圖片中選擇一張刪除掉以降低總高度。他希望剩余N-1張圖片按原順序的排版高度最低,你能求出最低高度是多少么?

      輸入:

      第一行包含兩個(gè)整數(shù) M 和 N,分別表示紙張寬度和圖片的數(shù)量。

      接下來 N 行,每行2個(gè)整數(shù)Wi, Hi,表示第 i 個(gè)圖大小為 Wi*Hi。

      對(duì)于30%的數(shù)據(jù),滿足1<=N<=1000

      對(duì)于100%的數(shù)據(jù),滿足1<=N<=100000,1<=M, Wi, Hi<=100

      輸出:

      一個(gè)整數(shù),表示在刪除掉某一張圖片之后,排版高度最少能是多少。

      樣例輸入:

      4 3

      2 2

      2 3

      2 2

      樣例輸出:

      2

      另一個(gè)示例,

      樣例輸入:

      2 10

      4 4

      4 3

      1 3

      4 5

      2 1

      2 3

      5 4

      5 3

      1 5

      2 4

      樣例輸出:

      17

      資源約定:

      峰值內(nèi)存消耗(含虛擬機(jī)) < 256M

      CPU消耗 ?< 2000ms

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

      所有代碼放在同一個(gè)源文件中,調(diào)試通過后,拷貝提交該源碼。

      不要使用package語(yǔ)句。不要使用jdk1.7及以上版本的特性。

      主類的名字必須是:Main,否則按無效代碼處理。

      題解:

      package action; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.StringTokenizer; public class demo { public static void main(String[] arg) { solve(); } static StringTokenizer ST; static BufferedReader BR; static PrintWriter PW; static String next() { while (ST == null || !ST.hasMoreTokens()) { try { ST = new StringTokenizer(BR.readLine()); } catch (Exception e) { // TODO: handle exception throw new RuntimeException(e); } } return ST.nextToken(); } static int nextInt() { return Integer.parseInt(next()); } public static void solve() { BR = new BufferedReader(new InputStreamReader(System.in)); PW = new PrintWriter(System.out); int m = nextInt(), n = nextInt(); Pair a[] = new Pair[n + 10]; Triple cr[] = new Triple[n + 10]; cr[0] = new Triple(); // 正向處理出加到第i塊的狀態(tài),Triple記憶第i塊右下坐標(biāo)(x,y)和第i塊縮放后的高度h for (int i = 1; i <= n; i++) { // 創(chuàng)建 Triple tmp = new Triple(cr[i - 1]); // 如果這一行裝不下,就置零換行 if (tmp.x == m) tmp.x = tmp.h = 0; // 新建輸入的寬高 a[i] = new Pair(nextInt(), nextInt()); cr[i] = new Triple(); Pair b = Change(a[i], m - tmp.x); // 保存當(dāng)前的位置 cr[i].x = tmp.x + b.x; cr[i].h = Math.max(tmp.h, b.y); cr[i].y = cr[i].h + tmp.y - tmp.h; } Triple A[] = new Triple[m]; Triple B[] = new Triple[m]; for (int i = 0; i < m; i++) { A[i] = new Triple(); B[i] = new Triple(); } int ans = cr[n].y; // 把每一個(gè)都嘗試一下 for (int i = n; i >= 1; i--) { // 處理刪除第i塊的答案ah Triple pre = cr[i - 1]; int ah; if (pre.x == m) { ah = pre.y + B[0].y; } else { ah = pre.y - pre.h + B[pre.x].y - B[pre.x].h + Math.max(pre.h, B[pre.x].h); } ans = Math.min(ans, ah); // 逆向DP,處理出第i至n塊從(0,j)位置開始放置 for (int j = 0; j < m; j++) { Pair b = Change(a[i], m - j); Triple tmp; // 放完這個(gè)我就要換行 if (j + b.x == m) tmp = new Triple(0, B[0].y, 0); // 如果不換行,還是這個(gè) else tmp = new Triple(B[j + b.x]); A[j].h = Math.max(b.y, tmp.h); A[j].y = A[j].h + tmp.y - tmp.h; } for (int j = 0; j < m; j++) B[j] = new Triple(A[j]); } PW.print(ans); PW.close(); } // a的x小就返回a,否則返回 static Pair Change(Pair A, int x) { if (A.x <= x) return new Pair(A); return new Pair(x, (A.y * x + A.x - 1) / A.x); } } class Pair implements Comparable { int x, y; Pair() { } Pair(Pair A) { x = A.x; y = A.y; } Pair(int x, int y) { this.x = x; this.y = y; } @Override public int compareTo(Pair A) { return x == A.x ? y - A.y : x - A.x; } } class Triple { int x, y, h; Triple() { } Triple(int x, int y, int h) { this.x = x; this.y = y; this.h = h; } Triple(Triple A) { x = A.x; y = A.y; h = A.h; } @Override public String toString() { return String.valueOf(x) + " " + String.valueOf(y) + " " + String.valueOf(h); } }

      5G游戲 Java

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:SpringCloud系列之服務(wù)容錯(cuò)保護(hù)Netflix Hystrix(springcloud容錯(cuò)機(jī)制)
      下一篇:企業(yè)安全建設(shè)進(jìn)階(企業(yè)安全管理提升)
      相關(guān)文章
      亚洲乱码无码永久不卡在线| 久久久久亚洲精品无码网址| 亚洲AV无码乱码在线观看裸奔| 亚洲精品成人a在线观看| 亚洲熟妇自偷自拍另欧美| 亚洲人成毛片线播放| 亚洲码在线中文在线观看| 色婷婷六月亚洲婷婷丁香| 亚洲成a人片77777老司机| 亚洲va久久久噜噜噜久久天堂| 亚洲精品无码久久久久去q| 国产亚洲精品国看不卡| 久久久青草青青国产亚洲免观 | 亚洲精品无码久久毛片| 国产亚洲精品免费| 一本久久综合亚洲鲁鲁五月天| 国产亚洲漂亮白嫩美女在线| 亚洲成a人片在线播放| AV在线亚洲男人的天堂| 亚洲精品少妇30p| 亚洲AV无码专区电影在线观看 | 亚洲动漫精品无码av天堂| 亚洲AV天天做在线观看| 精品亚洲成a人片在线观看少妇 | 亚洲人成依人成综合网| 亚洲伦另类中文字幕| 亚洲精品无码久久毛片波多野吉衣| 精品日韩亚洲AV无码| 亚洲人成在线中文字幕| 亚洲影院天堂中文av色| 亚洲av无码无线在线观看| 亚洲 无码 在线 专区| 国产亚洲一区二区三区在线不卡 | 亚洲日韩欧洲无码av夜夜摸| 日韩va亚洲va欧洲va国产| 亚洲资源在线观看| 亚洲成a人片在线观看精品| 亚洲区日韩精品中文字幕| 亚洲XX00视频| 在线观看亚洲av每日更新| 亚洲AV电影院在线观看|