目錄
前言:以下代碼僅供參考,若有錯誤歡迎指正哦~
1 平方末尾
平方末尾 能夠表示為某個整數的平方的數字稱為“平方數” 比如,25,64 雖然無法立即說出某個數是平方數,但經常可以斷定某個數不是平方數。 因為平方數的末位只可能是:[0, 1, 4, 5, 6, 9] 這6個數字中的某個。 所以,4325435332必然不是平方數。 如果給你一個2位或2位以上的數字,你能根據末位的兩位來斷定它不是平方數嗎? 請計算一下,一個2位以上的平方數的最后兩位有多少種可能性? 注意:需要提交的是一個整數,表示2位以上的平方數最后兩位的不同情況數。 不要填寫任何多余內容(比如,說明解釋文字等) 答案:22
1 import java.util.HashSet; 2 3 public class Main { 4 public static HashSet<String> set = new HashSet<String>(); 5 6 public static void main(String[] args) { 7 for(long i = 10;i <= 1000000;i++) { 8 String a = "" + (i * i / 10 % 10) * 10 + "" +i * i % 10; 9 set.add(a); 10 } 11 System.out.println(set.size()); 12 } 13 }
2 七星填數
七星填數 如圖【圖1.png】所示。 在七角星的14個節點上填入1~14 的數字,不重復,不遺漏。 要求每條直線上的四個數字之和必須相等。 圖中已經給出了3個數字。 請計算其它位置要填充的數字,答案唯一。 填好后,請提交綠色節點的4個數字(從左到右,用空格分開) 比如:12 5 4 8 當然,這不是正確的答案。 注意:只提交4個用空格分開的數字,不要填寫任何多余的內容。 答案:10 3 9 8
1 import java.util.HashSet; 2 3 public class Main { 4 public static int sum = 0; 5 6 public void swap(int[] A, int i, int j) { 7 int temp = A[i]; 8 A[i] = A[j]; 9 A[j] = temp; 10 } 11 12 public void dfs(int[] A, int step) { 13 if(step == A.length) { 14 int[] count = new int[7]; 15 count[0] = A[0] + A[1] + A[2] + A[3]; 16 count[1] = A[0] + A[4] + A[6] + A[9]; 17 count[2] = A[1] + A[4] + 6 + 14; 18 count[3] = A[2] + A[5] + 6 + 11; 19 count[4] = A[6] + A[8] + A[10] + 14; 20 count[5] = A[7] + A[8] + A[9] + 11; 21 count[6] = A[3] + A[5] + A[7] + A[10]; 22 HashSet<Integer> set = new HashSet<Integer>(); 23 for(int i = 0;i < 7;i++) 24 set.add(count[i]); 25 if(set.size() == 1) { 26 for(int i = 0;i < A.length;i++) 27 System.out.print(A[i]+" "); 28 System.out.println(); 29 } 30 sum++; 31 return; 32 } else { 33 for(int i = step;i < A.length;i++) { 34 swap(A, i, step); 35 dfs(A, step + 1); 36 swap(A, i, step); 37 } 38 } 39 } 40 41 public static void main(String[] args) { 42 Main test = new Main(); 43 int[] A = {1,2,3,4,5,7,8,9,10,12,13}; 44 test.dfs(A, 0); 45 System.out.println(sum); 46 } 47 }
3 打印數字
打印數字 小明寫了一個有趣的程序,給定一串數字。 它可以輸出這串數字拼出放大的自己的樣子。 比如“2016”會輸出為: 22222 00000 1 6666 2 2 0 0 1 1 6 2 0 0 1 666666 2 0 0 1 6 6 2 0 0 1 6 6 2 2 0 0 1 6 6 2222222 00000 1111 66666 請仔細分析代碼,填寫划線部分缺少的內容。 public class Main { static void f(int n) { String[][] di = {{" 00000 ", "0 0", "0 0", "0 0", "0 0", "0 0", " 00000 "}, {" 1 ", " 1 1 ", " 1 ", " 1 ", " 1 ", " 1 ", " 1111"}, {" 22222 ", "2 2", " 2", " 2 ", " 2 ", " 2 2", "2222222"}, {" 33333 ", "3 3", " 3", " 3333 ", " 3", "3 3", " 33333 "}, {" 44 ", " 4 4 ", " 4 4 ", "4 4 ", "4 4 ", "4444444", " 4 "}, {" 55555 ", " 5 ", "555555 ", " 5", " 5", "5 5", " 55555 "}, {" 6666 ", "6 ", "666666 ", "6 6", "6 6", "6 6", " 66666 "}, {"7777777", "7 7 ", " 7 ", " 7 ", " 7 ", " 7 ", " 7 "}, {" 88888 ", "8 8", "8 8", " 88888 ", "8 8", "8 8", " 88888 "}, {" 99999 ", "9 9", "9 9", " 999999", " 9", "9 9", " 99999 "}}; char[] cc = (""+n).toCharArray(); for(int i=0; i<di[0].length; i++){ for(int j=0; j<cc.length; j++){ System.out.print( ____________________ + " "); //填空位置 } System.out.println(); } } public static void main(String[] args) { f(2016); } } 注意:只提交划線部分缺少的代碼,不要添加任何題面已有代碼或符號。 也不要提交任何說明解釋文字等。 答案:di[cc[j]-'0'][i]
4 贏球票
贏球票 某機構舉辦球票大獎賽。獲獎選手有機會贏得若干張球票。 主持人拿出 N 張卡片(上面寫着 1~N 的數字),打亂順序,排成一個圓圈。 你可以從任意一張卡片開始順時針數數: 1,2,3..... 如果數到的數字剛好和卡片上的數字相同,則把該卡片收入囊中,從下一個卡片重新數數。 直到再無法收獲任何卡片,游戲結束。囊中卡片數字的和就是贏得球票的張數。 比如: 卡片排列是:1 2 3 我們從1號卡開始數,就把1號卡拿走。再從2號卡開始,但數的數字無法與卡片對上, 很快數字越來越大,不可能再拿走卡片了。因此這次我們只贏得了1張球票。 還不算太壞!如果我們開始就傻傻地從2或3號卡片數起,那就一張卡片都拿不到了。 如果運氣好,卡片排列是 2 1 3 那我們可以順利拿到所有的卡片! 本題的目標就是:已知順時針卡片序列。 隨便你從哪里開始數,求最多能贏多少張球票(就是收入囊中的卡片數字之和) 輸入數據: 第一行一個整數N(N<100),表示卡片數目 第二行 N 個整數,表示順時針排列的卡片 輸出數據: 一行,一個整數,表示最好情況下能贏得多少張球票 比如: 用戶輸入: 3 1 2 3 程序應該輸出: 1 比如: 用戶輸入: 3 2 1 3 程序應該輸出: 6 資源約定: 峰值內存消耗 < 256M CPU消耗 < 1000ms 請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。 所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。 注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。 注意:主類的名字必須是:Main,否則按無效代碼處理。
1 import java.util.Scanner; 2 3 public class Main { 4 public static int n; 5 public static int max = 0; 6 public static int[] value; 7 8 public void getResult() { 9 for(int i = 0;i < n;i++) { 10 int[] temp = new int[n]; 11 for(int k = 0;k < n;k++) 12 temp[k] = value[k]; 13 int sum = 0; 14 int count = 1; 15 int start = i; 16 while(true) { 17 boolean judge = true; 18 for(int k = 0;k < n;k++) 19 if(temp[k] >= count) { 20 judge = false; 21 break; 22 } 23 if(judge) 24 break; 25 int j = start % n; 26 if(temp[j] == count) { 27 sum = sum + count; 28 temp[j] = -1; 29 count = 1; 30 } else if(temp[j] != -1) 31 count++; 32 start++; 33 } 34 max = Math.max(max, sum); 35 } 36 System.out.println(max); 37 } 38 39 public static void main(String[] args) { 40 Main test = new Main(); 41 Scanner in = new Scanner(System.in); 42 n = in.nextInt(); 43 value = new int[n]; 44 for(int i = 0;i < n;i++) 45 value[i] = in.nextInt(); 46 test.getResult(); 47 } 48 }