Tuesday, September 15, 2015

[Bài tập mẫu] Bài tập Java cơ bản (phần 1)

Bài 1. Viết chương trình tìm ước số chung lớn nhất, bội số chung nhỏ nhất của hai số tự nhiên a b.
package simplecodecjava.blogspot.com;
import java.util.Scanner;
public class JavaBeginerExercise1 {
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static int UCLN(int a, int b) {
  while (a != b) {
   if (a > b)
    a = a - b;
   else
    b = b - a;
  }
  return (a);
 }

 public static void main(String[] args) {
  System.out.println("Nhap a");
  int a = nhap();
  System.out.println("Nhap b");
  int b = nhap();
  System.out.println("Uoc chung lon nhat cua " + a + " va " + b + " la: " + UCLN(a, b));
  System.out.println("Boi chung nho nhat cua " + a + " va " + b + " la: " + ((a * b) / UCLN(a, b)));
 }

}
Output:
Nhap a 10
Nhap b 15
Uoc chung lon nhat cua 10 va 15 la: 5
Boi chung nho nhat cua 10 va 15 la: 30
Bài 2. Viết chương trình chuyển đổi một số tự nhiên ở hệ cơ số 10 thành số ở hệ cơ số b bất kì (1< b≤ 36).
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise2 {
 public static void doiCoSo(int n, int base) {
  if (n >= base)
   doiCoSo(n / base, base);
  if (n % base > 9)
   System.out.printf("%c", n % base + 55);
  else
   System.out.print((n % base));
 }

 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void main(String[] args) {
  System.out.println("Nhap n");
  int n = nhap();
  System.out.println("Nhap vao co so can chuyen sang b");
  int b = nhap();
  System.out.println("So " + n + " chuyen sang co so " + b + " thanh: ");
  doiCoSo(n, b);
 }

}
Output:
Nhap n
 100
Nhap vao co so can chuyen sang b
 2
So 100 chuyen sang co so 2 thanh: 
1100100
Bài 3. Hãy viết chương trình tính tổng các chữ số của một số nguyên bất kỳ. Ví dụ: Số  8545604 có tổng các chữ số là: 8+5+4+5+6+0+4= 32.
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise3 {
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static int tinhTong(long i) {
  int sum = 0;
  long n;
  while (i != 0) {
   n = i % 10;
   sum += n;
   i /= 10;
  }
  return (sum);
 }

 public static void main(String[] args) {
  System.out.print("Nhap n");
  int n = nhap();
  System.out.println("Tong cua so " + n + " = " + tinhTong(n));
 }

}
Output:
Nhap n 8545604
Tong cua so 8545604 = 32
Bài 4. Viết chương trình phân tích một số nguyên thành tích các thừa số nguyên tố. Ví dụ: Số 28 được phân tích thành 2 x 2 x 7
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise4 {
 public static void phanTich(int n) {
  int i = 2;
  while (n > 1) {
   if (n % i == 0) {
    System.out.print(i);
    n /= i;
    if(n > 1) System.out.print(".");
   } else
    i++;
  }
 }

 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void main(String[] args) {
  System.out.print("Nhap n");
  int n = nhap();
  System.out.print(n + "= ");
  phanTich(n);
 }

}
Output:
Nhap n 28
28= 2.2.7
Bài 5. Viết chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n cho trước.
Lý thuyết kiểm tra một số là số nguyên tố xem tại đây.
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise5 {
 public static void lietKe(int n) {
  if (n > 2)
   System.out.print("2");
  for (int i = 3; i < n; i += 2) {
   if (ktNguyenTo(i))
    System.out.print(" " + i);
  }
 }

 public static boolean ktNguyenTo(int n) {
  if (n == 2 || n == 3)
   return true;
  if (n == 1 || n % 2 == 0 || n % 3 == 0)
   return false;
  int k = -1;
  do {
   k += 6;
   if (n % k == 0 || n % (k + 2) == 0)
    break;
  } while (k * k < n);// k < sqrt(n);
  return k * k > n;// return k > sqrt(n).
 }

 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void main(String[] args) {
  System.out.print("Nhap n");
  int n = nhap();
  System.out.println("Cac so nguyen to nho hon " + n + " ");
  lietKe(n);
 }

}
Output:
Nhap n 100
Cac so nguyen to nho hon 100 
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Bài 6. Viết chương trình liệt kê n số nguyên tố đầu tiên.
Lý thuyết kiểm tra một số là số nguyên tố xem tại đây.
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise6 {
 public static void lietKe(int n) {
  int i = 2, count = 0;
  while (count < n) {
   if (ktNguyenTo(i)) {
    System.out.print(" " + i);
    count++;
   }
   i++;
  }
 }

 public static boolean ktNguyenTo(int n) {
  if (n == 2 || n == 3)
   return true;
  if (n == 1 || n % 2 == 0 || n % 3 == 0)
   return false;
  int k = -1;
  do {
   k += 6;
   if (n % k == 0 || n % (k + 2) == 0)
    break;
  } while (k * k < n);// k < sqrt(n);
  return k * k > n;// return k > sqrt(n).
 }

 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void main(String[] args) {
  System.out.print("Nhap n");
  int n = nhap();
  System.out.println(n + " so nguyen to dau tien la: ");
  lietKe(n);
 }

}
Output:
Nhap n 5
5 so nguyen to dau tien la: 
2 3 5 7 11
Bài 7. Dãy số Fibonacci được định nghĩa như sau: F0 =1, F1 = 1; Fn = Fn-1 + Fn-2 với n>=2. Hãy viết chương trình tìm số Fibonacci thứ n.
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise7 {

 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void main(String[] args) {
  System.out.print("Nhap n");
  int n = nhap();
  int[] f = new int[n + 1];
  f[0] = 1;
  f[1] = 1;
  for (int i = 2; i <= n; i++) {
   f[i] = f[i - 1] + f[i - 2];
  }
  System.out.println("So Fibonanci thu " + n + " la: f[" + n + "]= " + f[n]);
 }

}
Output:
Nhap n 5
So Fibonanci thu 5 la: f[5]= 8
Bài 8. Một số được gọi là số thuận nghịch độc nếu ta đọc từ trái sang phải hay từ phải sang trái số đó ta vẫn nhận được một số giống nhau. Hãy liệt kê tất cả các số thuận nghịch độc có sáu chữ số (Ví dụ số: 558855).
package simplecodecjava.blogspot.com;

public class JavaBeginerExercise8 {

 public static boolean testSoThuanNghich(int n) {
  StringBuilder xau = new StringBuilder();
  String str = "" + n;
  xau.append(str);
  String check = "" + xau.reverse();
  if (str.equals(check))
   return true;
  else
   return false;
 }

 public static void main(String[] args) {
  int n, count = 0;
  for (n = 100000; n <= 999999; n++) {
   if (testSoThuanNghich(n)) {
    System.out.println(n);
    count++;
   }
  }
  System.out.println("Co " + count + " so thuan nghich co 6 chu so");
 }

}
Do file đầu ra quá lớn nên mình không in Output ở đây. Để xem Output bạn có thể xem tại đây.
Bài 9. Viết chương trình liệt kê tất cả các xâu nhị phân độ dài n.
Có thể bạn quan tâm:
[Bài toán] Liệt kê dãy nhị phân độ dài n.
[Bài toán] Liệt kê các xâu nhị phân độ dài n bằng thuật toán Back Track
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExersise9 {
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print("Nhap n ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void main(String[] args) {
  int n = nhap();
  int[] array = new int[n];
  int tich;
  do {
   tich = 1;
   System.out.println("");
   // In ra mang va tinh tich cac phan tu trong mang
   for (int j = 0; j < n; j++) {
    System.out.print(" " + array[j]);
    tich *= array[j];
   }
   int i = n - 1;
   do {
    if (array[i] == 0) {
     array[i] = 1;
     for (int j = n - 1; j > i; j--) {
      array[j] = 0;
     }
     break;
    } else
     i--;
   } while (i >= 0);
  } while (tich != 1);
 }

}
Output:
Nhap n 3

 0 0 0
 0 0 1
 0 1 0
 0 1 1
 1 0 0
 1 0 1
 1 1 0
 1 1 1
Bài 10. Viết chương trình liệt kê tất cả các tập con k phần tử của tập gồm n phần tử 1, 2, ..,n (k≤n).
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise10 {
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print("Nhap n ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void result(int a[], int k) {
  int i;
  System.out.println();
  for (i = 1; i <= k; i++) {
   System.out.print("  " + a[i]);
  }
 }

 public static void try_backTrack(int a[], int n, int k, int i) {
  int j;
  for (j = a[i - 1] + 1; j <= (n - k + i); j++) {
   a[i] = j;
   if (i == k)
    result(a, k);
   else
    try_backTrack(a, n, k, i + 1);
  }
 }

 public static void main(String[] args) {
  int n = nhap();
  int[] array = new int[n + 1];
  int k;
  System.out.println("Liet ke tat ca cac tap con k phan tu cua 1,2,..," + n + " : ");
  for (k = 1; k <= n; k++) {
   System.out.println("\nTap con " + k + " phan tu: ");
   try_backTrack(array, n, k, 1);
  }
 }

}
Output:
Nhap n 3
Liet ke tat ca cac tap con k phan tu cua 1,2,..,3 : 
Tap con 1 phan tu: 
  1
  2
  3
Tap con 2 phan tu: 
  1  2
  1  3
  2  3
Tap con 3 phan tu: 
  1  2  3
Bài 11. Viết chương trình liệt kê tất cả các hoán vị của 1, 2, .., n.
Có thể bạn quan tâm đến:
[Bài toán] Liệt kê các hoán vị của tập n phần tử bằng thuật toán Back Track
[Bài toán] Liệt kê các hoán vị của một tập có lặp theo thứ tự từ điển
[Bài toán] Liệt kê tất cả các hoán vị của n phần tử.
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise11 {
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void main(String[] args) {
  System.out.print("Nhap n");
  int n = nhap();
  int[] array = new int[n + 2];
  int i, j, k = n - 1, temp, check = 1;
  for (i = 0; i < n; i++) {
   array[i] = i + 1;
  }
  System.out.println("Cac hoan vi ke la: ");
  try {
   i = n - 2;
   while (check > 0) {
    // In ra hoan vi
    System.out.println("   ");
    for (j = 0; j < n; j++) {
     System.out.print(" " + array[j]);
    }
    for (i = n - 2; i >= 0; i--) {
     check = 1;
     if (array[i] < array[i + 1]) {
      if (i == n - 2) {
       temp = array[i];
       array[i] = array[n - 1];
       array[n - 1] = temp;
       break;
      } else {
       // Tim so a[k] nho nhat ma >a[i] trong cac so ben
       // phai a[i]
       k = i + 1;
       for (j = i + 1; j < n; j++) {
        if (array[i + 1] > array[j] && array[j] > array[i])
         k = j;

       }
       // Doi cho a[k] va a[i]
       temp = array[i];
       array[i] = array[k];
       array[k] = temp;
       // Sap xep lai tu a[i+1] toi a[n]
       for (j = i + 1; j < n; j++) {
        for (int m = i + 1; m < n; m++) {
         if (array[j] < array[m]) {
          temp = array[j];
          array[j] = array[m];
          array[m] = temp;
         }
        }
       }
       break;
      }
     } else {
      check = 0;
      // break;
     }
    }
    // if(i==0)check=0;
   }
  } catch (Exception e) {
  }
 }
}
Output:
Nhap n 3
Cac hoan vi ke la: 
   
 1 2 3   
 1 3 2   
 2 1 3   
 2 3 1   
 3 1 2   
 3 2 1
Bài 12. Nhập số liệu cho 2 dãy số thực a0 , a1 ,..., am-1 b0 , b1 ,..., bn-1. Giả sử cả 2 dãy này đã được sắp theo thứ tự tăng dần. Hãy tận dụng tính sắp xếp của 2 dãy và tạo dãy c0 , c1 ,..., cm+n-1 là hợp của 2 dãy trên, sao cho dãy ci cũng có thứ tự tăng dần .
package simplecodecjava.blogspot.com;

import java.util.Arrays;
import java.util.Scanner;

public class JavaBeginerExercise12 {
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static void inArray(int[] a, int begin, int end) {
  System.out.print("Ket qua: ");
  int i;
  for (i = begin; i < end; i++) {
   System.out.print(" " + a[i]);
  }
  System.out.println();
 }

 public static void themPhanTu(int[] a, int n, int pt) {
  a[0] = pt;
  Arrays.sort(a);
 }

 public static void main(String[] args) {
  System.out.print("Nhap n ");
  int n = nhap();
  System.out.print("Nhap m ");
  int m = nhap();
  int i;
  int[] a = new int[n + m];
  int[] b = new int[m];
  // Nhap vao mang A va sap xep theo thu tu tang dan
  System.out.println("Nhap mang A: ");
  for (i = 0; i < n; i++) {
   System.out.print("Nhap phan tu thu " + i + " = ");
   a[i] = nhap();
  }
  Arrays.sort(a);
  // Nhap vao mang B va sap xep theo thu tu tang dan
  System.out.println("nhap mang B: ");
  for (i = 0; i < m; i++) {
   System.out.print("Nhap phan tu thu " + i + " = ");
   b[i] = nhap();
  }
  Arrays.sort(b);
  // Gop mang b vao mang a
  for (i = 0; i < m; i++) {
   themPhanTu(a, n + m + 1, b[i]);
  }
  inArray(a, 0, n + m);
 }
}
Output:
Nhap n 3
Nhap m 4
Nhap mang A: 
Nhap phan tu thu 0 = 3
Nhap phan tu thu 1 = 6
Nhap phan tu thu 2 = 5
nhap mang B: 
Nhap phan tu thu 0 = 22
Nhap phan tu thu 1 = 4
Nhap phan tu thu 2 = 7
Nhap phan tu thu 3 = 9
Ket qua:  3 4 5 6 7 9 22

Bài 13. Nhập số liệu cho dãy số thực a0 , a1 ,..., an-1 . Hãy liệt kê các phần tử xuất hiện trong dãy đúng một lần.
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise13 {
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static int countElement(int a[], int n, int i) {
  int count = 0;
  for (int j = 0; j < n; j++) {
   if (a[j] == i)
    count++;
  }
  return (count);
 }

 public static void main(String[] args) {
  int n, i;
  System.out.println("Nhap n= ");
  n = nhap();
  int[] array = new int[n];
  for (i = 0; i < n; i++) {
   System.out.println("Nhap phan tu thu " + (i + 1) + " ");
   array[i] = nhap();
  }
  System.out.print("Cac phan tu trong day xuat hien 1 lan: ");
  for (i = 0; i < n; i++) {
   if (countElement(array, n, array[i]) == 1)
    System.out.print("  " + array[i]);
  }
 }
}
Output:
Nhap n= 
 4
Nhap phan tu thu 1 
 1
Nhap phan tu thu 2 
 1
Nhap phan tu thu 3 
 2
Nhap phan tu thu 4 
 4
Cac phan tu trong day xuat hien 1 lan:   2  4
Bài 14. Nhập số liệu cho dãy số thực a0 , a1 ,..., an-1. Hãy liệt kê các phần tử xuất hiện trong dãy đúng 2 lần.
package simplecodecjava.blogspot.com;

import java.util.Scanner;

public class JavaBeginerExercise14 {
 public static int nhap() {
  Scanner input = new Scanner(System.in);
  boolean check = false;
  int n = 0;
  while (!check) {
   System.out.print(" ");
   try {
    n = input.nextInt();
    check = true;
   } catch (Exception e) {
    System.out.println("Ban phai nhap so! hay nhap lai...");
    input.nextLine();
   }
  }
  return (n);
 }

 public static int countElement(int a[], int n, int i) {
  int count = 0;
  for (int j = 0; j < n; j++) {
   if (a[j] == i)
    count++;
  }
  return (count);
 }

 public static void main(String[] args) {
  int n, i;
  System.out.println("Nhap n= ");
  n = nhap();
  int[] array = new int[n];
  for (i = 0; i < n; i++) {
   System.out.println("Nhap phan tu thu " + (i + 1) + " ");
   array[i] = nhap();
  }
  System.out.print("Cac phan tu trong day xuat hien 2 lan: ");
  for (i = 0; i < n; i++) {
   if (countElement(array, n, array[i]) == 2 && countElement(array, i, array[i]) == 0) {
    System.out.print("  " + array[i]);
   }

  }
 }

}
Output:
Nhap n= 
 5
Nhap phan tu thu 1 
 3
Nhap phan tu thu 2 
 4
Nhap phan tu thu 3 
 5
Nhap phan tu thu 4 
 6
Nhap phan tu thu 5 
 4
Cac phan tu trong day xuat hien 2 lan:   4
Xem thêm Bài tập Java cơ bản phần 2 tại đây.
Xem thêm Bài tập Java cơ bản phần 3 tại đây.
Project của bài viết được tải về tại đây.
Cám ơn bạn đã đọc bài viết này. Hãy chia sẻ bài viết và bình luận ý kiến của bạn ở bên dưới.

Share this

Chào mừng bạn đến với SimpleCodeCJava Blog - Mục đích của chúng tôi khi thành lập blog này là muốn chia sẻ những kiến thức và kinh nghiệm lập trình mà chúng tôi đã học được với mong muốn giúp đỡ mọi người, giúp bạn rút ngắn được thời gian tìm hiểu cũng như việc giải quyết những vấn đề trong lập trình C và Java.

1 Comment to "[Bài tập mẫu] Bài tập Java cơ bản (phần 1)"

TienAnhvn said...

thu thuat lap trinh java qua hay