題目及解析如下:
題目大致介紹:
第一題到第四題是結果填空,方法不限只要得到最后結果就行
第五題和第六題是代碼填空題,主要考察算法基本功和編程基本功
第七題到第十題是編程題,要求編程解決問題
第一題 購物單
題目如下:
1 標題: 購物單 2 3 小明剛剛找到工作,老板人很好,只是老板夫人很愛購物。老板忙的時候經常讓小明幫忙到商場代為購物。小明很厭煩,但又不好推辭。 4 5 這不,XX大促銷又來了!老板夫人開出了長長的購物單,都是有打折優惠的。 6 小明也有個怪癖,不到萬不得已,從不刷卡,直接現金搞定。 7 現在小明很心煩,請你幫他計算一下,需要從取款機上取多少現金,才能搞定這次購物。 8 9 取款機只能提供100元面額的紙幣。小明想盡可能少取些現金,夠用就行了。 10 你的任務是計算出,小明最少需要取多少現金。 11 12 以下是讓人頭疼的購物單,為了保護隱私,物品名稱被隱藏了。 13 ----------------- 14 **** 180.90 88折 15 **** 10.25 65折 16 **** 56.14 9折 17 **** 104.65 9折 18 **** 100.30 88折 19 **** 297.15 半價 20 **** 26.75 65折 21 **** 130.62 半價 22 **** 240.28 58折 23 **** 270.62 8折 24 **** 115.87 88折 25 **** 247.34 95折 26 **** 73.21 9折 27 **** 101.00 半價 28 **** 79.54 半價 29 **** 278.44 7折 30 **** 199.26 半價 31 **** 12.97 9折 32 **** 166.30 78折 33 **** 125.50 58折 34 **** 84.98 9折 35 **** 113.35 68折 36 **** 166.57 半價 37 **** 42.56 9折 38 **** 81.90 95折 39 **** 131.78 8折 40 **** 255.89 78折 41 **** 109.17 9折 42 **** 146.69 68折 43 **** 139.33 65折 44 **** 141.16 78折 45 **** 154.74 8折 46 **** 59.42 8折 47 **** 85.44 68折 48 **** 293.70 88折 49 **** 261.79 65折 50 **** 11.30 88折 51 **** 268.27 58折 52 **** 128.29 88折 53 **** 251.03 8折 54 **** 208.39 75折 55 **** 128.88 75折 56 **** 62.06 9折 57 **** 225.87 75折 58 **** 12.89 75折 59 **** 34.28 75折 60 **** 62.16 58折 61 **** 129.12 半價 62 **** 218.37 半價 63 **** 289.69 8折 64 -------------------- 65 66 需要說明的是,88折指的是按標價的88%計算,而8折是按80%計算,余者類推。 67 特別地,半價是按50%計算。 68 69 請提交小明要從取款機上提取的金額,單位是元。 70 答案是一個整數,類似4300的樣子,結尾必然是00,不要填寫任何多余的內容。 71 72 73 特別提醒:不許攜帶計算器入場,也不能打開手機。
思路:將上面出現的數字復制進eclipse,然后把****改成+把文字去掉,半折改成50,在數字與打的折之間加“0.” 最后得出結果
另外注意根據題目要求最后算出來的最后兩位要是00,換句話說就是要向上取整,舉個例子比如算出來是3546,那么最后答案應該是3600
此題答案:5200,代碼如下:
1 public class t1 { 2 public static void main(String[] args) { 3 double res = 0 + 180.90 * 0.88 + 10.25 * 0.65 + 56.14 * 0.9 4 + 104.65 * 0.9 + 100.30 * 0.88 + 297.15 * 0.5 + 26.75 * 0.65 5 + 130.62 * 0.5 + 240.28 * 0.58 + 270.62 * 0.8 + 115.87 * 0.88 6 + 247.34 * 0.95 + 73.21 * 0.9 + 101.00 * 0.5 + 79.54 * 0.5 7 + 278.44 * 0.7 + 199.26 * 0.5 + 12.97 * 0.9 + 166.30 * 0.78 8 + 125.50 * 0.58 + 84.98 * 0.9 + 113.35 * 0.68 + 166.57 * 0.5 9 + 42.56 * 0.9 + 81.90 * 0.95 + 131.78 * 0.8 + 255.89 * 0.78 10 + 109.17 * 0.9 + 146.69 * 0.68 + 139.33 * 0.65 + 141.16 * 0.78 11 + 154.74 * 0.8 + 59.42 * 0.8 + 85.44 * 0.68 + 293.70 * 0.88 12 + 261.79 * 0.65 + 11.30 * 0.88 + 268.27 * 0.58 + 128.29 * 0.88 13 + 251.03 * 0.8 + 208.39 * 0.75 + 128.88 * 0.75 + 62.06 * 0.9 14 + 225.87 * 0.75 + 12.89 * 0.75 + 34.28 * 0.75 + 62.16 * 0.58 15 + 129.12 * 0.5 + 218.37 * 0.5 + 289.69 * 0.8; 16 System.out.println(res); 17 int r = (int) res; 18 r = r % 100 != 0 ? r - r % 100 + 100 : r; 19 System.out.println(r); 20 } 21 }
第二題 紙牌三角形
題目如下:
1 標題:紙牌三角形 2 3 A,2,3,4,5,6,7,8,9 共9張紙牌排成一個正三角形(A按1計算)。要求每個邊的和相等。 4 下圖就是一種排法(如有對齊問題,參看p1.png)。 5 6 A 7 9 6 8 4 8 9 3 7 5 2 10 11 這樣的排法可能會有很多。 12 13 如果考慮旋轉、鏡像后相同的算同一種,一共有多少種不同的排法呢? 14 15 請你計算並提交該數字。 16 17 注意:需要提交的是一個整數,不要提交任何多余內容。
思路:對1、2、3、4、5、6、7、8、9進行全排列然后check,然后最后結果除以6(每種全排列的結果都會有6種)
代碼如下:
1 public class t2 { 2 3 public static int res = 0; 4 5 public static void f(int[] arr, int n) { 6 7 if (n == arr.length) { 8 if (arr[0] + arr[1] + arr[3] + arr[5] == arr[5] + arr[6] + arr[7] + arr[8] 9 && arr[5] + arr[6] + arr[7] + arr[8] == arr[0] + arr[2] + arr[4] + arr[8]) { 10 res += 1; 11 } 12 return; 13 } 14 15 for (int i = n; i < arr.length; i++) { 16 int temp = arr[n]; 17 arr[n] = arr[i]; 18 arr[i] = temp; 19 f(arr, n + 1); 20 temp = arr[n]; 21 arr[n] = arr[i]; 22 arr[i] = temp; 23 } 24 25 } 26 27 public static void main(String[] args) { 28 int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 29 f(arr, 0); 30 System.out.println(res); 31 System.out.println(res / 6); // 答案: 144 32 } 33 34 }
第三題 承壓計算
題目如下:
1 標題:承壓計算 2 3 X星球的高科技實驗室中整齊地堆放着某批珍貴金屬原料。 4 5 每塊金屬原料的外形、尺寸完全一致,但重量不同。 6 金屬材料被嚴格地堆放成金字塔形。 7 8 7 9 5 8 10 7 8 8 11 9 2 7 2 12 8 1 4 9 1 13 8 1 8 8 4 1 14 7 9 6 1 4 5 4 15 5 6 5 5 6 9 5 6 16 5 5 4 7 9 3 5 5 1 17 7 5 7 9 7 4 7 3 3 1 18 4 6 4 5 5 8 8 3 2 4 3 19 1 1 3 3 1 6 6 5 5 4 4 2 20 9 9 9 2 1 9 1 9 2 9 5 7 9 21 4 3 3 7 7 9 3 6 1 3 8 8 3 7 22 3 6 8 1 5 3 9 5 8 3 8 1 8 3 3 23 8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9 24 8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4 25 2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9 26 7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6 27 9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3 28 5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9 29 6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4 30 2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4 31 7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6 32 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 33 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 34 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 35 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 36 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 37 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 38 39 其中的數字代表金屬塊的重量(計量單位較大)。 40 最下一層的X代表30台極高精度的電子秤。 41 42 假設每塊原料的重量都十分精確地平均落在下方的兩個金屬塊上, 43 最后,所有的金屬塊的重量都嚴格精確地平分落在最底層的電子秤上。 44 電子秤的計量單位很小,所以顯示的數字很大。 45 46 工作人員發現,其中讀數最小的電子秤的示數為:2086458231 47 48 請你推算出:讀數最大的電子秤的示數為多少? 49 50 注意:需要提交的是一個整數,不要填寫任何多余的內容。
第四題 魔法狀態
涉及到數學問題,難度大,我選擇放棄
第五題 取數位
題目如下:
1 標題:取數位 2 3 求1個整數的第k位數字有很多種方法。 4 以下的方法就是一種。 5 6 public class Main 7 { 8 static int len(int x){ 9 if(x<10) return 1; 10 return len(x/10)+1; 11 } 12 13 // 取x的第k位數字 14 static int f(int x, int k){ 15 if(len(x)-k==0) return x%10; 16 return ______________________; //填空 17 } 18 19 public static void main(String[] args) 20 { 21 int x = 23513; 22 //System.out.println(len(x)); 23 System.out.println(f(x,3)); 24 } 25 } 26 27 對於題目中的測試數據,應該打印5。 28 29 請仔細分析源碼,並補充划線部分所缺少的代碼。 30 31 注意:只提交缺失的代碼,不要填寫任何已有內容或說明性的文字。
代碼:
1 public class t5 { 2 3 static int len(int x){ 4 if(x<10) return 1; 5 return len(x/10)+1; 6 } 7 8 // 取x的第k位數字 9 static int f(int x, int k){ 10 if(len(x)-k==0) return x%10; 11 return f(x/10, k); //填空 12 } 13 14 public static void main(String[] args) 15 { 16 int x = 23513; 17 //System.out.println(len(x)); 18 System.out.println(f(x,3)); 19 } 20 21 }
第六題 最大公共子串
題目如下:
1 標題:最大公共子串 2 3 最大公共子串長度問題就是: 4 求兩個串的所有子串中能夠匹配上的最大長度是多少。 5 6 比如:"abcdkkk" 和 "baabcdadabc", 7 可以找到的最長的公共子串是"abcd",所以最大公共子串長度為4。 8 9 下面的程序是采用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。 10 11 請分析該解法的思路,並補全划線部分缺失的代碼。 12 13 14 15 public class Main 16 { 17 static int f(String s1, String s2) 18 { 19 char[] c1 = s1.toCharArray(); 20 char[] c2 = s2.toCharArray(); 21 22 int[][] a = new int[c1.length+1][c2.length+1]; 23 24 int max = 0; 25 for(int i=1; i<a.length; i++){ 26 for(int j=1; j<a[i].length; j++){ 27 if(c1[i-1]==c2[j-1]) { 28 a[i][j] = __________________; //填空 29 if(a[i][j] > max) max = a[i][j]; 30 } 31 } 32 } 33 34 return max; 35 } 36 37 public static void main(String[] args){ 38 int n = f("abcdkkk", "baabcdadabc"); 39 System.out.println(n); 40 } 41 } 42 43 44 注意:只提交缺少的代碼,不要提交已有的代碼和符號。也不要提交說明性文字
代碼(動態規划):
1 public class t6 { 2 static int f(String s1, String s2) { 3 char[] c1 = s1.toCharArray(); 4 char[] c2 = s2.toCharArray(); 5 6 int[][] a = new int[c1.length + 1][c2.length + 1]; 7 8 int max = 0; 9 for (int i = 1; i < a.length; i++) { 10 for (int j = 1; j < a[i].length; j++) { 11 if (c1[i - 1] == c2[j - 1]) { 12 a[i][j] = a[i - 1][j - 1] + 1; // 填空 13 if (a[i][j] > max) 14 max = a[i][j]; 15 } 16 } 17 } 18 19 return max; 20 } 21 22 public static void main(String[] args) { 23 int n = f("abcdkkk", "baabcdadabc"); 24 System.out.println(n); 25 } 26 }
第七題 日期問題
題目如下:
1 標題:日期問題 2 3 小明正在整理一批歷史文獻。這些歷史文獻中出現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期采用的格式非常不統一,有采用年/月/日的,有采用月/日/年的,還有采用日/月/年的。更加麻煩的是,年份也都省略了前兩位,使得文獻上的一個日期,存在很多可能的日期與其對應。 4 5 比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。 6 7 給出一個文獻上的日期,你能幫助小明判斷有哪些可能的日期對其對應嗎? 8 9 輸入 10 ---- 11 一個日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9) 12 13 輸入 14 ---- 15 輸出若干個不相同的日期,每個日期一行,格式是"yyyy-MM-dd"。多個日期按從早到晚排列。 16 17 樣例輸入 18 ---- 19 02/03/04 20 21 樣例輸出 22 ---- 23 2002-03-04 24 2004-02-03 25 2004-03-02 26 27 資源約定: 28 峰值內存消耗(含虛擬機) < 256M 29 CPU消耗 < 1000ms 30 31 32 請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。 33 34 所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。 35 不要使用package語句。不要使用jdk1.7及以上版本的特性。 36 主類的名字必須是:Main,否則按無效代碼處理。
第九題 分巧克力
1 標題: 分巧克力 2 3 兒童節那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。 4 小明一共有N塊巧克力,其中第i塊是Hi x Wi的方格組成的長方形。 5 6 為了公平起見,小明需要從這 N 塊巧克力中切出K塊巧克力分給小朋友們。切出的巧克力需要滿足: 7 8 1. 形狀是正方形,邊長是整數 9 2. 大小相同 10 11 例如一塊6x5的巧克力可以切出6塊2x2的巧克力或者2塊3x3的巧克力。 12 13 當然小朋友們都希望得到的巧克力盡可能大,你能幫小Hi計算出最大的邊長是多少么? 14 15 輸入 16 第一行包含兩個整數N和K。(1 <= N, K <= 100000) 17 以下N行每行包含兩個整數Hi和Wi。(1 <= Hi, Wi <= 100000) 18 輸入保證每位小朋友至少能獲得一塊1x1的巧克力。 19 20 輸出 21 輸出切出的正方形巧克力最大可能的邊長。 22 23 樣例輸入: 24 2 10 25 6 5 26 5 6 27 28 樣例輸出: 29 2 30 31 資源約定: 32 峰值內存消耗(含虛擬機) < 256M 33 CPU消耗 < 1000ms 34 35 36 請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。 37 38 所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。 39 不要使用package語句。不要使用jdk1.7及以上版本的特性。 40 主類的名字必須是:Main,否則按無效代碼處理
第八題 包子湊數 第十題 k倍區間
涉及到數學問題,難度大,我選擇放棄