一、閏年判斷【此題題目已經給出了閏年的計算方法,直接按照題目給出的提示即可得出結果】
問題描述
給定一個年份,判斷這一年是不是閏年。
當以下情況之一滿足時,這一年是閏年:
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 }
注:本文系原創,首發于部落格園,轉載請注明出處。
作者:無言
如果您認為閱讀這篇部落格讓您有些收獲,不妨點選一下右下角的【推薦】
如果您希望與我交流互動,歡迎微網誌互粉
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。