Bài tập java cơ bản (P1)

 Hàm nhập data từ bàn phím

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);
    }


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 và b

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

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).


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));
    }

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.

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

 Bài 4. Viết chương trình phân tích một số nguyên thành các thừa số nguyên tố.         Ví dụ: Số 28 được phân tích thành 2 x 2 x 7

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

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.
public static void lietKe(int n){                         System.out.print(" 2");
                        for(int i=3;i<n;i+=2){
                                    if(cachamchung.checkSNT(i))System.out.print(" "+i);
                        }
            }

Bài 6. Viết chương trình liệt kê n số nguyên tố đầu tiên.

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

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
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]);
    }

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)

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;
            }

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.
public static void main(String[] args) {        System.out.println("Nhap n");
                        int n= nhap();
                        int[] array= new int[n];
                        int tich;
                        do{
                                    tich= 1;
                                    //In ra mang va tinh tich cac phan tu trong mang
                                    System.out.println("");
                                    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);
    }

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 1, 2, ..,n (k≤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) {
        System.out.println("Nhap n");
                        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("\n Tap con "+k+" phan tu: ");
                                    try_backTrack(array,n,k,1);
                        }
    }

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

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){}
    }

 Bài 15. 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

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]);
                                    }

                        }
    }

Bài 16. Nhập số liệu  cho dãy số thực  a0 , a1 ,..., an-1 . In ra màn hình số lần xuất hiện của các phần tử

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();
                        }
                        for(i=0 ; i<n ; i++){
                                    if(countElement(array, i, array[i])==0){
                                                System.out.println("Phan tu "+array[i]+ " xuat hien "+countElement(array, n, array[i])+" lan");
                                    }
                        }
    }

Bài 17. Nhập một xâu ký tự. Đếm số từ của xâu ký tự đó. Thí dụ "   Trường    học  " có 2 từ

public static void main(String[] args) {         Scanner input= new Scanner(System.in);
                        System.out.println("Nhap vao 1 xau: ");
                        String str= input.nextLine();
                        StringTokenizer strToken= new StringTokenizer(str, " ");
                        System.out.println("So cac tu trong xau la: "+strToken.countTokens());
    }

Bài 19. Viết chương trình liệt kê tất cả các số nguyên tố có 5 chữ số sao cho tổng của các chữ số trong mỗi số nguyên tố đều bằng S cho trước

public static boolean checkSNT(int n){                         if(n>1){
                        for(int i=2;i<=Math.sqrt(n);i++){
                                    if(n%i==0) return false;
                        }
                        return true;
            }
                        else return false;
            }
    public static int tongChuSo(int n){
                        int T=0;
                        while(n>0){
                                    T+= n%10;
                                    n/= 10;
                        }
                        return (T);
            }
    public static void main(String[] args) {
        System.out.print("Nhap S= ");
                        int s= nhap();
                        int i,count=0;
                        System.out.println("Cac so nguyen to co tong cac chu so co tong bang "+s+" la: ");
                        for(i=10000 ; i<=99999 ; i++){
                                    if(checkSNT(i)){
                                                if(tongChuSo(i)== s) {
                                                            System.out.println(" "+i);
                                                            count++;
                                                }
                                                else continue;
                                    }
                        }
                        System.out.println("Co "+count+" so thoa man");
    }

Bài 20. Nhập một số tự nhiên n. Hãy liệt kê các số Fibonaci nhỏ hơn n là số nguyên tố.

public static boolean checkSNT(int n){                         if(n>1){
                        for(int i=2;i<=Math.sqrt(n);i++){
                                    if(n%i==0) return false;
                        }
                        return true;
            }
                        else return false;
            }
    public static void main(String[] args) {
        System.out.print("Nhap n= ");
                        int n= nhap();
                        int[] f= new int[n];
                        f[0]= 1; f[1]= 1;
                        int i=1,count=1;
                        System.out.print("Cac so Fibonanci nho hon "+n+" la so nguyen to: \n 1");
                        while(f[i]<n){
                                    if(checkSNT(f[i])){
                                                System.out.print(" "+f[i]);
                                                count++;
                                    }
                                    i++;
                                    f[i]= f[i-1] + f[i-2];
                        }
                        System.out.println("\n Co "+count+" so thoa man");
    }

Bài 21. Viết chương trình nhập một số nguyên dương n và thực hiện các chức năng sau:
a)Tính tổng các chữ số của n.
b)Phân tích n thành các thừa số nguyên tố.

public static int tongChuSo(int n){                         int T=0;
                        while(n>0){
                                    T+= n%10;
                                    n/= 10;
                        }
                        return (T);
            }
    //Ham kiem tra so nguyen to
            public static boolean checkSNT(int n){
                        if(n>1){
                        for(int i=2;i<=Math.sqrt(n);i++){
                                    if(n%i==0) return false;
                        }
                        return true;
            }
                        else return false;
            }
    public static void phanTich(int n){
                        int i=2;
                        while(n>1){
                                    if(checkSNT(i)){
                                                if(n%i==0){
                                                            System.out.print(i+".");
                                                            n/=i;
                                                }
                                                else i++;
                                    }
                                    else i++;
                        }
            }

Bài 22. Viết chương trình nhập một số nguyên dương n và thực hiện các chức năng sau:
a)Liệt kê các ước số của n. Có bao nhiêu ước số.
b)Liệt kê các ước số là nguyên tố của n

public static boolean checkSNT(int n){                         if(n>1){
                        for(int i=2;i<=Math.sqrt(n);i++){
                                    if(n%i==0) return false;
                        }
                        return true;
            }
                        else return false;
            }
    public static void lietKeUoc(int n){
                        int count=0;
                        System.out.print("\nCac uoc cua "+n+" la:");
                        for(int i=1 ; i<=n ; i++){
                                    if(n%i==0) {
                                                System.out.print(" "+i);
                                                count++;
                                    }
                        }
                                    System.out.println("\nCo "+count+" uoc");
            }
            public static void lietKeUocSNT(int n){
                        int count=0;
                        System.out.print("\nCac uoc cua "+n+" la:");
                        for(int i=1 ; i<=n ; i++){
                                    if(n%i==0 && (checkSNT(i))) {
                                                System.out.print(" "+i);
                                                count++;
                                    }
                        }
                                    System.out.println("\nCo "+count+" uoc la so nguyen to");
            }

1 comment: