第八屆藍橋杯 2017年省賽真題(Java 大學C組)(第八屆藍橋杯單片機國賽)
第一題:外星日歷
題目:
某星系深處發現了文明遺跡。
他們的計數也是用十進制。
他們的文明也有日歷。日歷只有天數,沒有年、月的概念。
有趣的是,他們也使用了類似“星期”的概念,
只不過他們的一個星期包含了9天,
為了方便,這里分別記為: A,B,C....H,I
從一些資料上看到,
他們的23日是星期E
他們的190日是星期A
他們的343251日是星期I
令人興奮的是,他們居然也預見了“世界末日”的那天,
當然是一個很大很大的數字
651764141421415346185
請你計算一下,這遙遠的一天是該文明的星期幾?
你需要提交的是一個大寫字母,表示該文明的星期幾,
不要填寫任何多余的內容。
思路:這是個填空題,還是那句話,能口算,絕不用代碼。題目中說了一星期包含9天,我們用題目上的天數取余9就可以得出相應的字母。
代碼:
import java.util.*; public class Main { public static void main(String args[]) { BigInteger big=new BigInteger("651764141421415346185"); BigInteger day=new BigInteger("9"); BigInteger sum=big.mod(day); System.out.println(sum); } }
第二題:興趣小組
題目:
為豐富同學們的業余文化生活,某高校學生會創辦了3個興趣小組
(以下稱A組,B組,C組)。
每個小組的學生名單分別在【A.txt】,【B.txt】和【C.txt】中。
每個文件中存儲的是學生的學號。
由于工作需要,我們現在想知道:
既參加了A組,又參加了B組,但是沒有參加C組的同學一共有多少人?
請你統計該數字并通過瀏覽器提交答案。
注意:答案是一個整數,不要提交任何多余的內容。
--------------------
笨笨有話說:
哇塞!數字好多啊!一眼望過去就能發現相同的,好像沒什么指望。
不過,可以排序啊,要是每個文件都是有序的,那就好多了。
歪歪有話說:
排什么序啊,這么幾行數字對計算機不是太輕松了嗎?
我看著需求怎么和中學學過的集合很像啊.....
A:
12894792, 92774113, 59529208, 22962224, 02991600, 83340521, 87365045,
40818286, 16400628, 39475245, 55933381, 76940287, 61366748, 95631228,
17102313, 50682833, 61562613, 87002524, 83062019, 51743442, 61977890,
32010762, 69680621, 87179571, 81761697, 32364296, 07833271, 36198035,
26588918, 84046668, 43059468, 73191775, 56794101, 00454780, 11141030,
10008994, 35072237, 44945158, 53959980, 75758119, 18560273, 35801494,
42102550, 22496415, 03981786, 34593672, 13074905, 07733442, 42374678,
23452507, 98586743, 30771281, 17703080, 52123562, 05898131, 56698981,
90758589, 18238802, 18217979, 04511837, 75682969, 31135682, 55379006,
42224598, 98263070, 40228312, 28924663, 11580163, 25686441, 45944028,
96731602, 53675990, 03854194, 14858183, 16866794, 40677007, 73141512,
32317341, 56641725, 43123040, 15201174, 62389950, 72887083, 76860787,
61046319, 06923746, 17874548, 46028629, 10577743, 48747364, 05328780,
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, 09683688, 58218284, 46792829, 97221709, 45286643,
48158629, 57367208, 26903401, 76900414, 87927040, 09926730, 01508757,
15101101, 62491840, 43802529,
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, 03981786, 81541612, 07346443, 93154608, 19709455, 37446968,
17703080, 72378958, 66200696, 30610382, 89586343, 33152171, 67040930,
35696683, 63242065, 99948221, 96233367, 52593493, 98263070, 01418023,
74816705, 89375940, 58405334, 96731602, 84089545, 16866794, 94737626,
01673442, 70548494, 13638168, 08163691, 11106566, 64375392, 40267902,
00897705, 56447313, 54532235, 94738425, 66642634, 83219544, 40546096,
66924991, 20592606, 96037590, 73434467, 70896866, 91025618, 57892091,
08487641, 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, 09683688, 67082008, 71605255,
80654064, 21434307, 45286643, 76556656, 82465821, 57367208, 79218980,
48460468, 59170479, 46046391, 43043164, 96544490, 83340521, 70837892,
18926791, 40818286, 28936302, 11489524, 51031183, 73860337, 13241219,
09025448, 10718828, 76360986, 26031606, 76558053, 97726139, 46473415,
48406387, 23625539, 86756012, 35164187, 49161302, 78082834, 35072237,
08602486, 29815841, 56562216, 77684187, 81751704, 20160464, 50407962,
27786415, 19893526, 00934129, 37759498, 52636463, 25666982, 43262852,
38393436, 02581136, 29323250, 56950657, 05898131, 95286262, 75574581,
54057961, 06703896, 90758589, 57782642, 34492535, 41919697, 06395464,
10993500, 81212949, 34017532, 69569396, 99009936, 57129610, 67401593,
71044018, 62076698, 29533873, 71936325, 86874388, 26545032, 35695544,
30433724, 53127345, 72887083, 25390873, 63711546, 06923746, 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, 05427896,
14444084, 36795868, 18079449, 59653393, 72942548, 06763077, 33895610,
94892653, 12085268, 65174140, 79567366, 23020126, 74290047, 13498869,
21696323, 27724594, 54941003, 38229841, 07050068,
C:
13404901, 39952424, 47847739, 94939581, 13809950, 70966043, 11161555,
17102313, 47079425, 50682833, 74154313, 61562613, 93200452, 37103342,
18479435, 32502597, 36198035, 54210010, 73191775, 48358178, 85544503,
05996766, 54651623, 52113220, 27465181, 23871783, 22496415, 54107041,
65899605, 56528700, 82671109, 61176034, 42374678, 51612628, 63329997,
56591652, 04552733, 12789324, 89586343, 51935014, 38611966, 43916409,
70996050, 98263070, 01418023, 65345049, 21734275, 76846198, 71506230,
00833171, 67128139, 41367555, 64769510, 44010700, 16475199, 93164325,
09386162, 95324041, 80688223, 67629139, 79552617, 76219736, 50368644,
45096021, 54972488, 63779011, 28862942, 73145521, 74078605, 66924991,
12806850, 02171001, 70896866, 73434467, 08487641, 44415025, 32500082,
84412833, 83896188, 52243759, 49191410, 38744339, 48079796, 44937032,
06267501, 81866886, 38575984, 25978688, 78974338, 41247821, 12356966,
64842303, 79127158, 02366944, 68000570, 12426275, 96409230, 00705972,
08266503, 83820884, 08831807, 43273308, 23216105, 29196547, 95160161,
05553537, 52182214, 32641346, 91553427, 24436506, 77433749, 01979664,
52028151, 88985343, 01761499, 76203088, 63237368, 23405334, 59788467,
09683688, 67755443, 29946533, 12053603, 00437479, 15200030, 45286643,
93537527, 82465821, 57367208, 53899751, 15354933, 97760830, 68933762,
80220545, 01892750, 39868288, 21524323, 69716610, 65083815, 78048499,
03227391, 83340521, 87365045, 71720254, 51031183, 89168555, 08503028,
37086236, 25103057, 87002524, 22808816, 80928090, 90741678, 15993372,
99117082, 49938176, 21755083, 86903426, 87830263, 53959980, 75758119,
59781354, 58679691, 25666982, 56307643, 47180521, 62776522, 78136608,
44882734, 90758589, 08075999, 66303819, 23480347, 11580163, 87080118,
18329165, 92514163, 89404632, 92377859, 03912329, 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, 09926730, 27724594, 95148523, 20503000, 64390907, 26006953,
98116293, 97457666, 29017396, 04634371, 70791589,
思路:定義三個數組來存儲這些數,然后在判斷重復的即可,代碼如下。
代碼:
import java.util.*; public class Main { 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, }; int num=0;//用來計算公共元素的個數 int [] d=new int[A.length];//輔助數組用來存放相同的元素 for(int i=0;i 第三題:紙牌三角形 題目: A,2,3,4,5,6,7,8,9 共9張紙牌排成一個正三角形(A按1計算)。要求每個邊的和相等。 下圖就是一種排法(如有對齊問題,參看p1.png)。 A 9 6 4 ? 8 3 7 5 2 這樣的排法可能會有很多。 如果考慮旋轉、鏡像后相同的算同一種,一共有多少種不同的排法呢? 請你計算并提交該數字。 注意:需要提交的是一個整數,不要提交任何多余內容。 --------------------------- 笨笨有話說: 感覺可以暴力破解哦。 麻煩的是,對每個排法還要算出它的旋轉、鏡像排法,看看有沒有和歷史重復。 歪歪有話說: 人家又不讓你把所有情況都打印出來,只是要算種類數。 對于每個基本局面,通過旋轉、鏡像能造出來的新局面數目不是固定的嗎? 思路:看這個題目里的提示,笨笨有話說,可以用暴力破解,所以呢,咱們直接上暴力的,九個for循環,在判斷九個數字不能重復,在判斷三條邊相等即可,上代碼。 代碼: import java.util.*; public class Main { public static void main(String args[]) { int count=0; for (int a = 1; a <= 9; a++) { for (int b = 1; b <= 9; b++) { for (int c = 1; c <= 9; c++) { for (int d = 1; d <= 9; d++) { for (int e = 1; e <= 9; e++) { for (int f = 1; f <= 9; f++) { for (int g = 1; g <=9; g++) { for (int h = 1; h <=9; h++) { for (int i =1; i <= 9; i++) { if (a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&& b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&& c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&& d!=e&&d!=f&&d!=g&&d!=h&&d!=i&& e!=f&&e!=g&&e!=h&&e!=i&& f!=g&&f!=h&f!=i&& g!=h&&g!=i&& h!=i ) { if ((a+b+d+f)==(a+c+e+i) && (a+b+d+f)==(f+g+h+i) && (a+c+e+i)==(f+g+h+i)) { count++; } } } } } } } } } } } System.out.println(count/3/2);//120 240 360 //左右 } } 第四題:承壓計算 題目: X星球的高科技實驗室中整齊地堆放著某批珍貴金屬原料。 每塊金屬原料的外形、尺寸完全一致,但重量不同。 金屬材料被嚴格地堆放成金字塔形。 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 其中的數字代表金屬塊的重量(計量單位較大)。 最下一層的X代表30臺極高精度的電子秤。 假設每塊原料的重量都十分精確地平均落在下方的兩個金屬塊上, 最后,所有的金屬塊的重量都嚴格精確地平分落在最底層的電子秤上。 電子秤的計量單位很小,所以顯示的數字很大。 工作人員發現,其中讀數最小的電子秤的示數為:2086458231 請你推算出:讀數最大的電子秤的示數為多少? 注意:需要提交的是一個整數,不要填寫任何多余的內容。 -------------------------------------------- 笨笨有話說: 不斷的除2,加到下面,除2,加到下面,.... 不會浮點精度溢出吧? 歪歪有話說: 怕除不開還不好辦, 把每個數字擴大一定的倍數不就好了。 這道題是在網上找的,屬實有點難...... 代碼: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); double[][] a = new double[30][30]; for (int i = 0; i < a.length - 1; i++) { for (int j = 0; j <= i; j++) { a[i][j] = in.nextDouble(); } } for (int i = 0; i < 29; i++) { for (int j = 0; j <= i; j++) { double avg = a[i][j] / 2.0;//平分 a[i + 1][j] += avg; a[i + 1][j + 1] += avg; } } double minVal = Double.MAX_VALUE; double maxVal = Double.MIN_VALUE; for (int i = 0; i < 30; i++) { if (a[29][i] < minVal) minVal = a[29][i]; if (a[29][i] > maxVal) maxVal = a[29][i]; } System.out.println(2086458231.0 / minVal * maxVal); } } 第五題:楊輝三角 題目: 楊輝三角也叫帕斯卡三角,在很多數量關系中可以看到,十分重要。 第0行: ? ? ? ? ? 1 第1行: ? ? ? ? ?1 1 第2行: ? ? ? ? 1 2 1 第3行: ? ? ? ?1 3 3 1 第4行: ? ? ? 1 4 6 4 1 .... 兩邊的元素都是1, 中間的元素是左上角的元素與右上角的元素和。 我們約定,行號,列號都從0計數。 所以: 第6行的第2個元素是15,第3個元素是20 直觀地看,需要開辟一個二維數組,其實一維數組也可以勝任。 如下程序就是用一維數組“騰挪”的解法。 代碼: 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)); } } 代碼填空: int q=p-1;q>0;q-- 第六題:最大公共子串 題目: 最大公共子串就是求兩個串的所有子串中能夠匹配上的最大長度是多少。 比如:"abcdkkk" 和 "baabcdadabc", 可以找到的最長的公共子串是"abcd",所以最大公共子串長度為4。 下面的程序是采用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。 請分析該解法的思路,并補全劃線部分缺失的代碼。 代碼: 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 代碼填空: a[i-1][j-1]+1 第七題:Excel地址 題目: Excel單元格的地址表示很有趣,它使用字母來表示列號。 比如, A表示第1列, B表示第2列, Z表示第26列, AA表示第27列, AB表示第28列, BA表示第53列, .... 當然Excel的最大列號是有限度的,所以轉換起來不難。 如果我們想把這種表示法一般化,可以把很大的數字轉換為很長的字母序列呢? 本題目既是要求對輸入的數字, 輸出其對應的Excel地址表示方式。 例如, 輸入: 26 則程序應該輸出: Z 再例如, 輸入: 2054 則程序應該輸出: BZZ 我們約定,輸入的整數范圍[1,2147483647] 資源約定: 峰值內存消耗(含虛擬機) < 256M CPU消耗 ?< 1000ms 請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。 所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。 不要使用package語句。不要使用jdk1.7及以上版本的特性。 主類的名字必須是:Main,否則按無效代碼處理。 ------------------------------ 笨笨有話說: 這有點像進制關系,又不完全是。好像末2位是以1當26,末3位是以1當26*26 歪歪有話說: 要是從字母序列轉數字還好點,倒過來有點麻煩,不過計算機跑得快啊。 代碼: import java.util.*; public class Main { public static void main(String args[]) { Scanner sc=new Scanner(System.in); int num=sc.nextInt(); //存儲Excel地址 String str = ""; while(num>0) { //判斷是否整除 if (num%26==0) { str='Z'+str; num/=26; num--; }else { str=(char)(num%26+64)+str; num/=26; } } System.out.println(str); } } 第八題:拉馬車 題目: 小的時候,你玩過紙牌游戲嗎? 有一種叫做“拉馬車”的游戲,規則很簡單,卻很吸引小朋友。 其規則簡述如下: 假設參加游戲的小朋友是A和B,游戲開始的時候,他們得到的隨機的紙牌序列如下: 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雙方輪流出牌。 當輪到某一方出牌時,他從自己的紙牌隊列的頭部拿走一張,放到桌上,并且壓在最上面一張紙牌上(如果有的話)。 此例中,游戲過程: A出K,B出2,A出8,B出7,A出X,此時桌上的序列為: K,2,8,7,X 當輪到B出牌時,他的牌K與桌上的紙牌序列中的K相同,則把包括K在內的以及兩個K之間的紙牌都贏回來,放入自己牌的隊尾。注意:為了操作方便,放入牌的順序是與桌上的順序相反的。 此時,A、B雙方的手里牌為: A方:[K, A, 2, A, 9, 5, A] B方:[5, J, 5, Q, 6, K, 4, K, X, 7, 8, 2, K] 贏牌的一方繼續出牌。也就是B接著出5,A出K,B出J,A出A,B出5,又贏牌了。 5,K,J,A,5 此時雙方手里牌: A方:[2, A, 9, 5, A] B方:[Q, 6, K, 4, K, X, 7, 8, 2, K, 5, A, J, K, 5] 注意:更多的時候贏牌的一方并不能把桌上的牌都贏走,而是拿走相同牌點及其中間的部分。但無論如何,都是贏牌的一方繼續出牌,有的時候剛一出牌又贏了,也是允許的。 當某一方出掉手里最后一張牌,但無法從桌面上贏取牌時,游戲立即結束。 對于本例的初始手牌情況下,最后A會輸掉,而B最后的手里牌為: 9K2A62KAX58K57KJ5 本題的任務就是已知雙方初始牌序,計算游戲結束時,贏的一方手里的牌序。當游戲無法結束時,輸出-1。 輸入為2行,2個串,分別表示A、B雙方初始手里的牌序列。 輸出為1行,1個串,表示A先出牌,最后贏的一方手里的牌序。 例如, 輸入: 96J5A898QA 6278A7Q973 則程序應該輸出: 2J9A7QA6Q6889977 再比如, 輸入: 25663K6X7448 J88A5KJXX45A 則程序應該輸出: 6KAJ458KXAX885XJ645 我們約定,輸入的串的長度不超過30 資源約定: 峰值內存消耗(含虛擬機) < 256M CPU消耗 ?< 1000ms 請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。 所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。 不要使用package語句。不要使用jdk1.7及以上版本的特性。 主類的名字必須是:Main,否則按無效代碼處理。 ---------------------------- 笨笨有話說: 不斷刪除前邊的,又要后邊添加.... 如果用數組,需要開一個大點的,請佛祖保佑在游戲結束前,不會用到數組的邊緣。 歪歪有話說: 反正串也不長,不如每次操作都返回一個新的串。 默默有話說: 我一般都不吱聲,這是典型的隊列結構,動態數組最好,沒有?自己造一個唄! 思路:這道題在網上copy的,大佬的寫法,有題目是典型的隊列結構,動態數組。而且本題目頻繁使用增刪。所以我們就使用LinkedList集合來模擬隊列。 代碼: import java.util.LinkedList; import java.util.Scanner; public class 拉馬車 { /** * @param args */ public static void main(String[] args) { Scanner sc=new Scanner(System.in); String s1=sc.nextLine(); String s2=sc.nextLine(); char ch1[]=s1.toCharArray(); char ch2[]=s2.toCharArray(); LinkedList 第九題:青蛙跳杯子 題目: X星球的流行寵物是青蛙,一般有兩種顏色:白色和黑色。 X星球的居民喜歡把它們放在一排茶杯里,這樣可以觀察它們跳來跳去。 如下圖,有一排杯子,左邊的一個是空著的,右邊的杯子,每個里邊有一只青蛙。 *WWWBBB 其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。 X星的青蛙很有些癖好,它們只做3個動作之一: 1. 跳到相鄰的空杯子里。 2. 隔著1只其它的青蛙(隨便什么顏色)跳到空杯子里。 3. 隔著2只其它的青蛙(隨便什么顏色)跳到空杯子里。 對于上圖的局面,只要1步,就可跳成下圖局面: WWW*BBB 本題的任務就是已知初始局面,詢問至少需要幾步,才能跳成另一個目標局面。 輸入為2行,2個串,表示初始局面和目標局面。 輸出要求為一個整數,表示至少需要多少步的青蛙跳。 例如: 輸入: *WWBB WWBB* 則程序應該輸出: 2 再例如, 輸入: WWW*BBB BBB*WWW 則程序應該輸出: 10 我們約定,輸入的串的長度不超過15 資源約定: 峰值內存消耗(含虛擬機) < 256M CPU消耗 ?< 1000ms 請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。 所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。 不要使用package語句。不要使用jdk1.7及以上版本的特性。 主類的名字必須是:Main,否則按無效代碼處理。 ---------------------------- 笨笨有話說: 我夢見自己是一棵大樹, 青蛙跳躍, 我就發出新的枝條, 春風拂動那第 5 層的新枝, 哦,我已是枝繁葉茂。 思路:求最短距離或是最少操作,用BFS,還不如理解成杯子跳青蛙呢! 代碼: import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Set; public class Main { static String start; static String end; static Queue 第十題:圖形排版 題目: 小明需要在一篇文檔中加入 N 張圖片,其中第 i 張圖片的寬度是 Wi,高度是 Hi。 假設紙張的寬度是 M,小明使用的文檔編輯工具會用以下方式對圖片進行自動排版: 1. 該工具會按照圖片順序,在寬度 M 以內,將盡可能多的圖片排在一行。該行的高度是行內最高的圖片的高度。例如在 M=10 的紙張上依次打印 3x4, 2x2, 3x3 三張圖片,則效果如下圖所示,這一行高度為4。(分割線以上為列標尺,分割線以下為排版區域;數字組成的矩形為第x張圖片占用的版面) 0123456789 ---------- 111 111 ?333 11122333 11122333 2. 如果當前行剩余寬度大于0,并且小于下一張圖片,則下一張圖片會按比例縮放到寬度為當前行剩余寬度(高度向上取整),然后放入當前行。例如再放入一張4x9的圖片,由于剩余寬度是2,這張圖片會被壓縮到2x5,再被放入第一行的末尾。此時該行高度為5: 0123456789 ---------- 44 111 ? ? 44 111 ?33344 1112233344 1112233344 3. 如果當前行剩余寬度為0,該工具會從下一行開始繼續對剩余的圖片進行排版,直到所有圖片都處理完畢。此時所有行的總高度和就是這 N 張圖片的排版高度。例如再放入11x1, 5x5, 3x4 的圖片后,效果如下圖所示,總高度為11: 0123456789 ---------- 44 111 ? ? 44 111 ?33344 1112233344 1112233344 5555555555 66666 66666777 66666777 66666777 66666777 現在由于排版高度過高,圖片的先后順序也不能改變,小明只好從 N 張圖片中選擇一張刪除掉以降低總高度。他希望剩余N-1張圖片按原順序的排版高度最低,你能求出最低高度是多少么? 輸入: 第一行包含兩個整數 M 和 N,分別表示紙張寬度和圖片的數量。 接下來 N 行,每行2個整數Wi, Hi,表示第 i 個圖大小為 Wi*Hi。 對于30%的數據,滿足1<=N<=1000 對于100%的數據,滿足1<=N<=100000,1<=M, Wi, Hi<=100 輸出: 一個整數,表示在刪除掉某一張圖片之后,排版高度最少能是多少。 樣例輸入: 4 3 2 2 2 3 2 2 樣例輸出: 2 另一個示例, 樣例輸入: 2 10 4 4 4 3 1 3 4 5 2 1 2 3 5 4 5 3 1 5 2 4 樣例輸出: 17 資源約定: 峰值內存消耗(含虛擬機) < 256M CPU消耗 ?< 2000ms 代碼: 借鑒的大佬的方法...... #include 每日一言:克服自己的惰性惰性是與生俱來的惰性是人生最頑固的敵人;惰性會磨滅人的意志;惰性使人失去理想;惰性使人陷入混沌;惰性使人消沉;惰性還會使人一事無成;人生最大的敵人是自己。 Java 大賽 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。