天天看點

藍橋杯基礎練習

一、閏年判斷【此題題目已經給出了閏年的計算方法,直接按照題目給出的提示即可得出結果】

問題描述

  給定一個年份,判斷這一年是不是閏年。

  當以下情況之一滿足時,這一年是閏年:

  1. 年份是4的倍數而不是100的倍數;

  2. 年份是400的倍數。

  其他的年份都不是閏年。

輸入格式

  輸入包含一個整數y,表示目前的年份。

輸出格式

  輸出一行,如果給定的年份是閏年,則輸出yes,否則輸出no。

  說明:當試題指定你輸出一個字元串作為結果(比如本題的yes或者no,你需要嚴格按照試題中給定的大小寫,寫錯大小寫将不得分。

樣例輸入

  2013

樣例輸出

  no

  2016

  yes

資料規模與約定

  1990 <= y <= 2050。

1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Scanner mScanner = new Scanner(System.in);
 7         int m = mScanner.nextInt();
 8         
 9         Main mMain1 = new Main();
10         
11         if (mMain1.check(m)) {
12             System.out.println("yes");
13         }else{
14             System.out.println("no");
15         }
16     
17     }
18     
19     public boolean check(int m){
20         if (m%1000==0) {
21             return true;
22         }else if(m%4==0){
23             return true;
24         }else{
25             return false;
26         }
27     }
28 
29 }      

二、01字串【此題直接循環輸出即可,進行暴力破解】

  對于長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:

  00000

  00001

  00010

  00011

  00100

  請按從小到大的順序輸出這32種01串。

  本試題沒有輸入。

  輸出32行,按從小到大的順序每行一個長度為5的01串。

  <以下部分省略>

1 public class Main {
 2     public static void main(String[] args) {
 3         int a;
 4         int b;
 5         int c;
 6         int d;
 7         int e;
 8 
 9         for (a = 0; a < 2; ++a)
10             for (b = 0; b < 2; ++b)
11                 for (c = 0; c < 2; ++c)
12                     for (d = 0; d < 2; ++d)
13                         for (e = 0; e < 2; ++e)
14                             System.out.println(a + "" + b + "" + c + "" + d +
15                                 "" + e);
16     }
17 }      

三、字母圖形【此題有點巧妙之處,就是先建立了一個一位數組arr,在數組中存儲了26*2-1個整數,分别是:25,24,23,……,2,1,0,1,2,……,23,24,25   然後通過carr[i] = (char)(arr[i]+'A');把整型數組轉化為char型字元串,最後通過循環來巧妙的輸出使用者輸入的圖】

  利用字母可以組成一些美麗的圖形,下面給出了一個例子:

  ABCDEFG

  BABCDEF

  CBABCDE

  DCBABCD

  EDCBABC

  這是一個5行7列的圖形,請找出這個圖形的規律,并輸出一個n行m列的圖形。

  輸入一行,包含兩個整數n和m,分别表示你要輸出的圖形的行數的列數。

  輸出n行,每個m個字元,為你的圖形。

  5 7

  1 <= n, m <= 26。

1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner scanner = new Scanner(System.in);
 6         String[] sarr = scanner.nextLine().split(" ");
 7 
 8         init(Integer.parseInt(sarr[0]), Integer.parseInt(sarr[1]));
 9     }
10 
11     public static void init(int m, int n) {
12         int[] arr = new int[(26 * 2) - 1];
13 
14         for (int i = 0; i < arr.length; i++) {
15             if (i < 26) {
16                 arr[i] = 25 - i; //25,24 ,,,0
17             } else {
18                 arr[i] = i - 26 + 1; //1,2,,,25
19             }
20         }
21 
22         char[] carr = new char[arr.length];
23 
24         for (int i = 0; i < arr.length; i++) {
25             carr[i] = (char) (arr[i] + 'A');
26         }
27 
28         int p = 25;
29 
30         for (int i = 0; i < m; i++) {
31             for (int j = 0; j < n; j++) {
32                 System.out.print(carr[p + j]);
33             }
34 
35             p--;
36             System.out.println();
37         }
38     }
39 }      

四、數列特征【這個題是我第一次做的時候的,先在發現這樣做有點麻煩了,求最大值,最小值可以直接使用系統的求最大值,最小值的函數】

  給出n個數,找出這n個數的最大值,最小值,和。

  第一行為整數n,表示數的個數。

  第二行有n個數,為給定的n個數,每個數的絕對值都小于10000。

  輸出三行,每行一個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。

  5

  1 3 -2 4 5

  -2

  11

  1 <= n <= 10000。

1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Scanner mScanner = new Scanner(System.in);
 7         int num;
 8         num = mScanner.nextInt();
 9         int[] arr = new int[num];
10         for (int i = 0; i < arr.length; i++) {
11             arr[i] = mScanner.nextInt();
12         }
13         int max = getMax(arr);
14         int min = getMin(arr);
15         int sum = getSum(arr);
16         System.out.println(max);
17         System.out.println(min);
18         System.out.println(sum);
19 
20     }
21 
22     public static int getMax(int[] arr) {
23         int tmp = arr[0];
24         for (int i = 1; i < arr.length; i++) {
25             if (arr[i] > tmp) {
26                 tmp = arr[i];
27             }
28         }
29         return tmp;
30     }
31     
32     public static int getMin(int[] arr) {
33         int tmp = arr[0];
34         for (int i = 1; i < arr.length; i++) {
35             if (arr[i] < tmp) {
36                 tmp = arr[i];
37             }
38         }
39         return tmp;
40     }
41 
42     public static int getSum(int[] arr) {
43         int tmp = 0;
44         for (int i = 0; i < arr.length; i++) {
45             tmp = tmp + arr[i];
46         }
47         return tmp;
48     }
49 
50 }      

五、查找整數【這個題也沒有難度,但是需要注意的是如果該數不在數列中存在的時候的傳回值是1,而不是其他值】

  給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。

  第一行包含一個整數n。

  第二行包含n個非負整數,為給定的數列,數列中的每個數都不大于10000。

  第三行包含一個整數a,為待查找的數。

  如果a在數列中出現了,輸出它第一次出現的位置(位置從1開始編号),否則輸出-1。

  6

  1 9 4 8 3 9

  9

  2

  1 <= n <= 1000。

1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner mScanner = new Scanner(System.in);
 6         int num;
 7         num = mScanner.nextInt();
 8         int[] arr = new int[num];
 9         for (int i = 0; i < arr.length; i++) {
10             arr[i] = mScanner.nextInt();
11         }
12         int s = mScanner.nextInt();
13         System.out.println(getIndexs(arr, s));
14     }
15 
16     public static int getIndexs(int[] arr, int s) {
17         int a = -1;
18         for (int i = 0; i < arr.length; i++) {
19             if (arr[i] == s) {
20                 a = i + 1;
21                 break;
22             }
23         }
24 
25         return a;
26     }
27 }      

六、楊輝三角形【楊輝三角是一個比較經典的問題,如果找到規律的話,做出此題也不是問題,但是這個題需要注意的是,每行的兩個數之間有一個空格隔開的,不然的話是沒有分的】

楊輝三角形又稱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。

1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         int i = 1;
 7         Scanner mScanner = new Scanner(System.in);
 8         int n = mScanner.nextInt();
 9         int yh[] = new int[n];
10         for (i = 0; i < yh.length; i++) {
11             yh[i] = 1;
12             for (int j = i - 1; j > 0; j--) {
13                 yh[j] = yh[j - 1] + yh[j];
14             }
15             for (int j = 0; j <= i; j++) {
16                 System.out.print(yh[j] + "\t");
17             }
18             System.out.println();
19         }
20     }
21 
22 }      

七、特殊的數字【暴力破解:從100開始,循環到999,即循環所有的三位數】

  153是一個非常特殊的數,它等于它的每位數字的立方和,即153=1*1*1+5*5*5+3*3*3。程式設計求所有滿足這種條件的三位十進制數。

  按從小到大的順序輸出滿足條件的三位十進制數,每個數占一行。

1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         for (int i = 100; i < 1000; i++) {
 5             check(i);
 6         }
 7     }
 8 
 9     public static void check(int n) {
10         int a = n % 10;
11         int b = (int) (n / 10) % 10;
12         int c = (int) ((int) (n / 10) / 10);
13         test(n, a, b, c);
14     }
15 
16     public static void test(int a, int m, int n, int t) {
17         if (a == m * m * m + n * n * n + t * t * t) {
18             System.out.println(a);
19         }
20     }
21 }      

八、回文數【暴力破解】

  1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,程式設計求所有這樣的四位十進制數。

  按從小到大的順序輸出滿足條件的四位十進制數。

1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         for (int i = 1; i <= 9; i++) {
 5             for (int j = 0; j <= 9; j++) {
 6                 for (int j2 = 0; j2 <= 9; j2++) {
 7                     for (int k = 1; k <= 9; k++) {
 8                         if (i == k && j == j2) {
 9                             System.out.println(i+""+j+""+j2+""+k);
10                         }
11                     }
12                 }
13             }
14         }
15     }
16 
17 }      

九、特殊回文數【暴力周遊所有符合條件的5位數,6位數】

  123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。

  輸入一個正整數n, 程式設計求所有這樣的五位和六位十進制數,滿足各位數字之和等于n 。

  輸入一行,包含一個正整數n。

  按從小到大的順序輸出滿足條件的整數,每個整數占一行。

52

899998

989989

998899

資料規模和約定

  1<=n<=54。

1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Scanner mScanner = new Scanner(System.in);
 7         int n = mScanner.nextInt();
 8         if (1 <= n && n <= 54) {
 9             test1(n);
10             test2(n);
11         }
12     }
13 
14     public static void test1(int m) {
15         for (int i = 1; i <= 9; i++) {
16             for (int j = 0; j <= 9; j++) {
17                 for (int j2 = 0; j2 <= 9; j2++) {
18                     if ((i + j) * 2 + j2 == m) {
19                         System.out.println(i * 10000 + j * 1000 + j2 * 100 + j
20                                 * 10 + i);
21                     }
22                 }
23             }
24         }
25     }
26 
27     public static void test2(int m) {
28         for (int i = 1; i <= 9; i++) {
29             for (int j = 0; j <= 9; j++) {
30                 for (int j2 = 0; j2 <= 9; j2++) {
31                     if ((i + j + j2) * 2 == m) {
32                         System.out.println(i * 100000 + j * 10000 + j2 * 1000
33                                 + j2 * 100 + j * 10 + i);
34                     }
35                 }
36             }
37         }
38     }
39 
40 }      

十、十進制轉十六進制【個人感覺這個代碼需要靈活運用掌握,(char) ((Integer.parseInt(a) - 10) + 'A');】

  十六進制數是在程式設計時經常要使用到的一種整數的表示方式。它有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

1 import java.util.*;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner mScanner = new Scanner(System.in);
 6         int m = mScanner.nextInt();
 7         if (0 <= m && m <= 2147483647) {
 8             if (m==0) {
 9                 System.out.print(0);
10             }else{
11                 test(m);
12             }
13         }
14     }
15 
16     public static void test(int m) {
17         Vector<String> arr = new Vector<String>();
18         while (m > 0) {
19             arr.add(m % 16 + "");
20             m = (int) (m / 16);
21         }
22 
23         for (int i = arr.size() - 1; i >= 0; i--) {
24             int mm = Integer.parseInt(arr.get(i));
25             char s;
26             if (mm >= 10) {
27                 s = change(arr.get(i));
28                 System.out.print(s);
29             } else {
30                 System.out.print(mm + "");
31             }
32 
33         }
34 
35     }
36 
37     public static char change(String a) {
38         return (char) ((Integer.parseInt(a) - 10) + 'A');
39     }
40 }      

十一、十六進制轉十進制【此處用到了一個toString方法!】

  從鍵盤輸入一個不超過8位的正的十六進制數字元串,将它轉換為正的十進制數後輸出。

  注:十六進制數中的10~15分别用大寫的英文字母A、B、C、D、E、F表示。

  FFFF

  65535

1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5 
 6     public static void main(String[] args) {
 7         Scanner mScanner = new Scanner(System.in);
 8         String aa  = mScanner.next();
 9         BigInteger mBigInteger = new BigInteger(aa,16);
10         System.out.println(mBigInteger.toString(10));
11     }
12 
13 }      

十二、十六進制轉八進制【此題由于題目給出的測試值太大,未能通過測試,此處不再給出代碼……,如果各位有更好的算法,可以私信我哦!】

  給定n個十六進制正整數,輸出它們對應的八進制數。

  輸入的第一行為一個正整數n (1<=n<=10)。

  接下來n行,每行一個由0~9、大寫字母A~F組成的字元串,表示要轉換的十六進制正整數,每個十六進制數長度不超過100000。

  輸出n行,每行為輸入對應的八進制正整數。

注意

  輸入的十六進制數不會有前導0,比如012A。

  輸出的八進制數也不能有前導0。

  39

  123ABC

  71

  4435274

提示

  先将十六進制數轉換成某進制數,再由某進制數轉換成八進制。

十三、數列排序【本題主要就是數組的排序,這裡用到了java已經封裝好的類庫中的一個排序方法 Arrays.sort(aa);】

  給定一個長度為n的數列,将這個數列按從小到大的順序排列。1<=n<=200

  第一行為一個整數n。

  第二行包含n個整數,為待排序的數,每個整數的絕對值小于10000。

  輸出一行,按從小到大的順序輸出排序後的數列。

  8 3 6 4 9

  3 4 6 8 9

1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5     public static void main(String[] args) {
 6         Scanner mm = new Scanner(System.in);
 7         int n = mm.nextInt();
 8         int []aa = new int[n]; 
 9         for (int i = 0; i < n; i++) {
10             aa[i] = mm.nextInt();
11         }
12         Arrays.sort(aa);
13         for (int i = 0; i < n; i++) {
14             System.out.print(aa[i]+" ");
15         }
16     }
17 
18 }      

注:本文系原創,首發于部落格園,轉載請注明出處。

藍橋杯基礎練習

作者:無言

如果您認為閱讀這篇部落格讓您有些收獲,不妨點選一下右下角的【推薦】

如果您希望與我交流互動,歡迎微網誌互粉

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀