蓝桥杯 基础训练 试题集汇总【13道】
練習系統
目? ?錄
BASIC-1 閏年判斷
BASIC-2 01字串
BASIC-3?字母圖形
BASIC-4?數列特征
BASIC-5 查找整數
BASIC-6 楊輝三角
BASIC-7?特殊的數字
BASIC-8 回文數
BASIC-9 特殊回文數
BASIC-10?十進制轉十六進制
解法一
解法二
解法三
解法四
BASIC-11?十六進制轉十進制
BASIC-12?十六進制轉八進制
解法一
解法二
BASIC-13?數列排序
BASIC-1 閏年判斷
資源限制
時間限制:1.0s ? 內存限制:256.0MB
問題描述
給定一個年份,判斷這一年是不是閏年。
當以下情況之一滿足時,這一年是閏年:
1. 年份是4的倍數而不是100的倍數;
2. 年份是400的倍數。
其他的年份都不是閏年。
輸入格式
輸入包含一個整數y,表示當前的年份。
輸出格式
輸出一行,如果給定的年份是閏年,則輸出yes,否則輸出no。
說明:當試題指定你輸出一個字符串作為結果(比如本題的yes或者no,你需要嚴格按照試題中給定的大小寫,寫錯大小寫將不得分。
樣例輸入
2013
樣例輸出
no
樣例輸入
2016
樣例輸出
yes
數據規模與約定
1990 <= y <= 2050。
package B基礎練習;import java.util.Scanner;public class A01_閏年判斷 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int year = sc.nextInt();if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {System.out.println("yes");} else {System.out.println("no");}}}BASIC-2 01字串
資源限制
時間限制:1.0s ? 內存限制:256.0MB
問題描述
對于長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:
00000
00001
00010
00011
00100
請按從小到大的順序輸出這32種01串。
輸入格式
本試題沒有輸入。
輸出格式
輸出32行,按從小到大的順序每行一個長度為5的01串。
樣例輸出
00000
00001
00010
00011
<以下部分省略>
BASIC-3?字母圖形
資源限制
時間限制:1.0s ? 內存限制:256.0MB
問題描述
利用字母可以組成一些美麗的圖形,下面給出了一個例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個5行7列的圖形,請找出這個圖形的規律,并輸出一個n行m列的圖形。
輸入格式
輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。
輸出格式
輸出n行,每個m個字符,為你的圖形。
樣例輸入
5 7
樣例輸出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
數據規模與約定
1 <= n, m <= 26。
package B基礎練習;import java.util.Scanner;public class A03_字母圖形 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();char str;// char[][] pattern=new char[n][m]; //會出現運行錯誤char[][] pattern = new char[26][26];int i = 0, j = 0;for (i = 0; i < n; i++) {str = 'A';for (j = i; j < m; j++) {// 此處兩個循環用來控制存儲字符pattern[i][j] = str++;}str = 'A';for (j = i - 1; j >= 0; j--) {pattern[i][j] = ++str;}}for (i = 0; i < n; i++) { // 此處用來輸出字符數組元素for (j = 0; j < m; j++) {System.out.print(pattern[i][j]);}System.out.println();}}} /*做這種圖形輸出題做多了些,就會發現做這類題就得要看圖找規律, 根據規律來寫代碼。像這道題的規律,它的第一行是按ABCDEFG..的順序展開, 第一列也是這樣。而第i行的第i位后 自左向右的字母也是按ABCDEF...展開的(i=1,2...,26), 而第i行第i位前自右向左也是按ABCDEF...展開的。根據這個規律就可以寫代碼了。 */BASIC-4?數列特征
資源限制
時間限制:1.0s ? 內存限制:256.0MB
問題描述
給出n個數,找出這n個數的最大值,最小值,和。
輸入格式
第一行為整數n,表示數的個數。
第二行有n個數,為給定的n個數,每個數的絕對值都小于10000。
輸出格式
輸出三行,每行一個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。
樣例輸入
5
1 3 -2 4 5
樣例輸出
5
-2
11
數據規模與約定
1 <= n <= 10000。
package B基礎練習;import java.util.Scanner;public class A04_數列特征 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int max = Integer.MIN_VALUE;int min = Integer.MAX_VALUE;int sum = 0;while (n != 0) {int num = sc.nextInt();if (num > max) {max = num;}if (num < min) {min = num;}sum += num;n--;}System.out.println(max);System.out.println(min);System.out.println(sum);}}BASIC-5 查找整數
資源限制
時間限制:1.0s ? 內存限制:256.0MB
問題描述
給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。
輸入格式
第一行包含一個整數n。
第二行包含n個非負整數,為給定的數列,數列中的每個數都不大于10000。
第三行包含一個整數a,為待查找的數。
輸出格式
如果a在數列中出現了,輸出它第一次出現的位置(位置從1開始編號),否則輸出-1。
樣例輸入
6
1 9 4 8 3 9
9
樣例輸出
2
數據規模與約定
1 <= n <= 1000。
package B基礎練習;import java.util.Scanner;public class A05_查找整數 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); //1 <= n <= 1000int arr[] = new int[n];for(int i = 0; i < n; i++) {arr[i] = sc.nextInt();}int a = sc.nextInt();int flag = -1;for(int i = 0; i < n; i++) {if( a == arr[i] ) {flag = i;break;}}if( flag == -1 ) {System.out.println(-1);} else {System.out.println(flag + 1);}}}BASIC-6 楊輝三角
資源限制
時間限制:1.0s ? 內存限制:256.0MB
問題描述
楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的系數。
它的一個重要性質是:三角形中的每個數字等于它兩肩上的數字相加。
下面給出了楊輝三角形的前4行:
???1
??1 1
?1 2 1
1 3 3 1
給出n,輸出它的前n行。
輸入格式
輸入包含一個數n。
輸出格式
輸出楊輝三角形的前n行。每一行從這一行的第一個數開始依次輸出,中間使用一個空格分隔。請不要在前面輸出多余的空格。
樣例輸入
4
樣例輸出
1
1 1
1 2 1
1 3 3 1
數據規模與約定
1 <= n <= 34。
package B基礎練習;import java.util.Scanner;public class A06_楊輝三角形 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int a[][] = new int[35][35];a[0][0] = a[1][0] = a[1][1] = 1;for (int i = 2; i < n; i++) {a[i][0] = 1;for (int j = 1; j <= i; j++) {a[i][j] = a[i - 1][j - 1] + a[i - 1][j];}}for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {System.out.print(a[i][j] + " ");}System.out.println();}}}BASIC-7?特殊的數字
資源限制
時間限制:1.0s ? 內存限制:512.0MB
問題描述
153是一個非常特殊的數,它等于它的每位數字的立方和,即153=1*1*1+5*5*5+3*3*3。編程求所有滿足這種條件的三位十進制數。
輸出格式
按從小到大的順序輸出滿足條件的三位十進制數,每個數占一行。
package B基礎練習;public class A07_特殊的數字 {public static void main(String[] args) {for (int i = 100; i <= 999; i++) {int a = i / 100;int b = i / 10 % 10;int c = i % 10;if (i == a * a * a + b * b * b + c * c * c) {System.out.println(i);}}}}BASIC-8 回文數
資源限制
時間限制:1.0s ? 內存限制:512.0MB
問題描述
1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進制數。
輸出格式
按從小到大的順序輸出滿足條件的四位十進制數。
package B基礎練習;public class A08_回文數 {public static void main(String[] args) {for (int i = 1000; i <= 9999; i++) {int a = i / 1000;int b = i / 100 % 10;int c = i / 10 % 10;int d = i % 10;int num = d * 1000 + c * 100 + b * 10 + a;if (i == num) {System.out.println(i);}}} }BASIC-9 特殊回文數
資源限制
時間限制:1.0s ? 內存限制:512.0MB
問題描述
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等于n 。
輸入格式
輸入一行,包含一個正整數n。
輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數占一行。
樣例輸入
52
樣例輸出
899998
989989
998899
數據規模和約定
1<=n<=54。
package B基礎練習;import java.util.Scanner;public class A09_特殊回文數 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();for (int i = 10000; i <= 99999; i++) {int a = i / 10000;int b = i / 1000 % 10;int c = i / 100 % 10;int d = i / 10 % 10;int e = i % 10;if (a + b + c + d + e == n && e * 10000 + d * 1000 + c * 100 + b * 10 + a == i) {System.out.println(i);}}for (int i = 100000; i <= 999999; i++) {int a = i / 100000;int b = i / 10000 % 10;int c = i / 1000 % 10;int d = i / 100 % 10;int e = i / 10 % 10;int f = i % 10;if (a + b + c + d + e + f == n && f * 100000 + e * 10000 + d * 1000 + c * 100 + b * 10 + a == i) {System.out.println(i);}}}}BASIC-10?十進制轉十六進制
資源限制
時間限制:1.0s ? 內存限制:512.0MB
問題描述
十六進制數是在程序設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個符號,分別表示十進制數的0至15。十六進制的計數方法是滿16進1,所以十進制數16在十六進制中是10,而十進制的17在十六進制中是11,以此類推,十進制的30在十六進制中是1E。
給出一個非負整數,將它表示成十六進制的形式。
輸入格式
輸入包含一個非負整數a,表示要轉換的數。0<=a<=2147483647
輸出格式
輸出這個整數的16進制表示
樣例輸入
30
樣例輸出
1E
解法一
package B基礎練習;import java.util.Scanner;public class A10_十進制轉十六進制 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int number = sc.nextInt();int i = 0;char[] s = new char[100];if (number == 0) {System.out.println(0);} else {while (number != 0) {int t = number % 16;if (t >= 0 && t < 10) { // 0-9s[i] = (char) (t + '0');i++;} else { // 10、11、12、13、14、15s[i] = (char) (t - 10 + 'A');i++;}number = number / 16;}for (int j = i - 1; j >= 0; j--) {System.out.print(s[j]);}}}} /*** 先輸入一個整型數字,判斷其是否為0,若為0,則其16進制同樣為0;* 若number不為0,則對16取余,并轉換成16進制相應的字符;* number=number/16,重復過程2、3,用字符數組s依次保存每一位;* 輸出的時候逆序輸出即可.*/解法二
package B基礎練習;import java.util.Scanner;public class A10_十進制轉十六進制2 {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();if (n == 0) {System.out.println(0);} else {System.out.println(intToHex(n));}}private static String intToHex(int n) {StringBuffer s = new StringBuffer();// StringBuilder s = new StringBuilder(8);String a;char[] b = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };while (n != 0) {s = s.append(b[n % 16]);n = n / 16;}a = s.reverse().toString();return a;}} /** StringBuffer:append(char c):將char參數的字符串表示形式追加到此序列。reverse():將此字符序列用其反轉形式取代。String:toString():返回此序列中數據的字符串表示形式。 */解法三
package B基礎練習;import java.util.Scanner;public class A10_十進制轉十六進制3 {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();change(n);}public static void change(int n) {StringBuffer s = new StringBuffer();if (n == 0) {System.out.println(0);return;}int m;while (n > 0) {m = n % 16;n = n / 16;switch (m) {case 0:s.insert(0, "0");break;case 1:s.insert(0, "1");break;case 2:s.insert(0, "2");break;case 3:s.insert(0, "3");break;case 4:s.insert(0, "4");break;case 5:s.insert(0, "5");break;case 6:s.insert(0, "6");break;case 7:s.insert(0, "7");break;case 8:s.insert(0, "8");break;case 9:s.insert(0, "9");break;case 10:s.insert(0, "A");break;case 11:s.insert(0, "B");break;case 12:s.insert(0, "C");break;case 13:s.insert(0, "D");break;case 14:s.insert(0, "E");break;case 15:s.insert(0, "F");break;}}System.out.println(s);}}解法四
package B基礎練習;import java.util.Scanner;public class A10_十進制轉十六進制4 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int dec_num = sc.nextInt(); // dec 十進制String hex_num = Integer.toHexString(dec_num); // hex 十六進制System.out.println(hex_num.toUpperCase());}}BASIC-11?十六進制轉十進制
資源限制
時間限制:1.0s ? 內存限制:512.0MB
問題描述
從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換為正的十進制數后輸出。
注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
樣例輸入
FFFF
樣例輸出
65535
package B基礎練習;import java.util.Scanner;public class A11_十六進制轉十進制 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String hex_num = sc.nextLine(); // hex 十六進制long dec_num = Long.parseLong(hex_num, 16); // dec 十進制System.out.println(dec_num);}} /** Long.parseLong(String s,int n), s 是一個包含long表示要解析的字符串,n 是進制數,* 它是將第一個參數用第二個參數進制來表示,如果不寫第二個參數的話默認是十進制。*/BASIC-12?十六進制轉八進制
資源限制
時間限制:1.0s ? 內存限制:512.0MB
問題描述
給定n個十六進制正整數,輸出它們對應的八進制數。
輸入格式
輸入的第一行為一個正整數n (1<=n<=10)。
接下來n行,每行一個由0~9、大寫字母A~F組成的字符串,表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。
輸出格式
輸出n行,每行為輸入對應的八進制正整數。
【注意】
輸入的十六進制數不會有前導0,比如012A。
輸出的八進制數也不能有前導0。
樣例輸入
2
39
123ABC
樣例輸出
71
4435274
【提示】
先將十六進制數轉換成某進制數,再由某進制數轉換成八進制。
解法一
package B基礎練習;import java.util.Scanner;public class A12_十六進制轉八進制 { // 錯誤public static void main(String[] args) { // 錯誤Scanner sc = new Scanner(System.in);int n = sc.nextInt();for (int i = 0; i < n; i++) {String hex_num = sc.next(); // hex 十六進制int dec_num = (int) Long.parseLong(hex_num, 16); // dec 十進制System.out.println(Integer.toOctalString(dec_num)); // 轉八進制}}}解法二
package B基礎練習;import java.util.Scanner;public class A12_十六進制轉八進制2 {// 定義常量字符串數組static String[] bin = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010","1011", "1100", "1101", "1110", "1111" };static String[] oct = { "0", "1", "2", "3", "4", "5", "6", "7" };public static void main(String[] args) {Scanner s = new Scanner(System.in);int n = s.nextInt(); // n個十六進制正整數String[] str = new String[n]; // 接收十六進制正整數的數組for (int i = 0; i < n; i++) { // 接收十六進制正整數str[i] = s.next();}for (int i = 0; i < n; i++) {String result = hexToBin(str[i]).toString(); // 十六進制轉換成二進制String octResult = binToOct(result); // 二進制轉換成八進制if (octResult.startsWith("0")) {octResult = octResult.substring(1); // 截取字符串} // if(octResult.startsWith("0")) { // octResult = octResult.substring(1); // }System.out.println(octResult);}}private static StringBuffer hexToBin(String str) { // 十六進制轉換成二進制int length = str.length();int start = 0;int end = 1;StringBuffer result = new StringBuffer();for (int i = 0; i < length; i++) {String subStr = str.substring(start, end); // 抽取一個十六進制字符start++;end++;String s = transform(subStr); // 將抽取的十六進制字符轉換成二進制字符result.append(s);}return result;}private static String binToOct(String str) { // 二進制轉換成八進制int length = str.length();if (length % 3 == 1) { // 二進制字符串的長度不是3的整數倍的時候,就要在字符串的前面補上相應個數的 ‘0’str = "00" + str; // 來讓二進制字符串的長度變成3的整數倍} else if (length % 3 == 2) {str = "0" + str;}int start = 0;int end = 3;StringBuffer sb = new StringBuffer();for (int i = 0; i < str.length() / 3; i++) {String subStr = str.substring(start, end); // 抽取三個二進制字符start += 3;end += 3;String s = transform2(subStr); // 將抽取的二進制字符串轉換成八進制字符sb.append(s);}return sb.toString();}private static String transform(String str) { // 將抽取的十六進制字符轉換成二進制字符String result = "";switch (str) {case "0":result = bin[0];break;case "1":result = bin[1];break;case "2":result = bin[2];break;case "3":result = bin[3];break;case "4":result = bin[4];break;case "5":result = bin[5];break;case "6":result = bin[6];break;case "7":result = bin[7];break;case "8":result = bin[8];break;case "9":result = bin[9];break;case "A":result = bin[10];break;case "B":result = bin[11];break;case "C":result = bin[12];break;case "D":result = bin[13];break;case "E":result = bin[14];break;case "F":result = bin[15];break;default:break;}return result;}private static String transform2(String str) { // 將抽取的二進制字符串轉換成八進制字符String result = "";switch (str) {case "000":result = oct[0];break;case "001":result = oct[1];break;case "010":result = oct[2];break;case "011":result = oct[3];break;case "100":result = oct[4];break;case "101":result = oct[5];break;case "110":result = oct[6];break;case "111":result = oct[7];break;}return result;} } /** substring(int beginIndex,int endIndex)返回一個新字符串,它是此字符串的一個子字符串。 該子字符串從指定的* beginIndex 處開始,直到索引 endIndex - 1 處的字符。 因此,該子字符串的長度為 endIndex-beginIndex。* * toString() 方法用于返回以一個字符串表示的 Number 對象值。 如果方法使用了原生的數據類型作為參數,返回原生數據類型的 String* 對象值。 如果方法有兩個參數, 返回用第二個參數指定基數表示的第一個參數的字符串表示形式。 toString(): 返回表示 Integer 值的* String 對象。 toString(int i): 返回表示指定 int 的 String 對象。*/BASIC-13?數列排序
資源限制
時間限制:1.0s ? 內存限制:512.0MB
問題描述
給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200
輸入格式
第一行為一個整數n。
第二行包含n個整數,為待排序的數,每個整數的絕對值小于10000。
輸出格式
輸出一行,按從小到大的順序輸出排序后的數列。
樣例輸入
5
8 3 6 4 9
樣例輸出
3 4 6 8 9
package B基礎練習;import java.util.Scanner; import java.util.Arrays;public class A13_數列排序 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int a[] = new int[n];for (int i = 0; i < n; i++) {a[i] = sc.nextInt();}Arrays.sort(a);for (int i = 0; i < n; i++) {System.out.print(a[i] + " ");}}}🌈🌈🌈
總結
以上是生活随笔為你收集整理的蓝桥杯 基础训练 试题集汇总【13道】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯 入门训练 试题集汇总 【A+B问
- 下一篇: 蓝桥杯 基础练习 2n皇后