Bài tập về chuỗi trong mảng trong c năm 2024

Dạng bài này thường yêu cầu bạn đếm hoặc liệt kê các phần tử trong mảng 2 chiều thỏa mãn tính chất cho trước như : số nguyên tố, thuận nghịch, hoàn hảo, fibonacci...

Đối với dạng bài tập này bạn chỉ cần biết duyệt mảng 2 chiều là có thể làm được.

Ví dụ 1 : Tìm phần tử nhỏ nhất, lớn nhất trong mảng 2 chiều

include "stdio.h"

include "math.h"

int main(){

int n = 4, m = 4;  
int a[4][4] = {  
    {3, 1, 0, 7},  
    {2, 5, 10, 3},  
    {3, 7, 4, 1},  
    {10, 2, 0, 3}  
};  
int min_val = 1000000000, max_val = -1000000000;  
for(int i = 0; i < n; i++){  
    for(int j = 0; j < m; j++){  
        if(a[i][j] > max_val){  
            max_val = a[i][j];  
        }  
        if(a[i][j] < min_val){  
            min_val = a[i][j];  
        }  
    }  
}  
printf("Gia tri nho nhat : %d\n", min_val);  
printf("Gia tri lon nhat : %d\n", max_val);  
return 0;  
}

Output :

Gia tri nho nhat : 0 Gia tri lon nhat : 10

Ví dụ 2 : Liệt kê các số Fibonacci trong mảng 2 chiều

include "stdio.h"

include "math.h"

int fibo(long long n){

long long F[100];  
F[0] = 0; F[1] = 1;  
for(int i = 2; i <= 92; i++){  
    F[i] = F[i - 1] + F[i - 2];  
}  
for(int i = 0; i <= 92; i++){  
    if(n == F[i]) return 1;  
}  
return 0;  
} int main(){
int n = 4, m = 4;  
int a[4][4] = {  
    {3, 1, 0, 7},  
    {2, 5, 10, 3},  
    {3, 7, 4, 1},  
    {10, 2, 0, 3}  
};  
printf("Cac so fibonacci : ");  
for(int i = 0; i < n; i++){  
    for(int j = 0; j < m; j++){  
        if(fibo(a[i][j])){  
            printf("%d ", a[i][j]);  
        }  
    }  
}  
return 0;  
}

Output :

Cac so fibonacci : 3 1 0 2 5 3 3 1 2 0 3


2. Bài Toán Xét Hàng, Cột

Dạng bài tập này thường yêu cầu các bạn xét từng hàng hoặc từng cột của mảng 2 chiều.

Đối với bài toán xét theo hàng bạn duyệt như bình thường còn đối với bài toán duyệt theo cột thì bạn cần để vòng for ngoài duyệt theo cột và vòng for con bên trong duyệt theo hàng.

Ví dụ 1 : Tính tổng từng hàng, từng cột của mảng 2 chiều

include "stdio.h"

include "math.h"

int main(){

int n = 4, m = 4;  
int a[4][4] = {  
    {3, 1, 0, 7},  
    {2, 5, 10, 3},  
    {3, 7, 4, 1},  
    {10, 2, 0, 3}  
};  
for(int i = 0; i < n; i++){  
    int tong = 0;  
    for(int j = 0; j < m; j++){  
        tong += a[i][j];  
    }  
    printf("Tong hang %d : %d\n", i, tong);  
}  
for(int i = 0; i < m; i++){  
    int tong = 0;  
    for(int j = 0; j < n; j++){  
        tong += a[j][i];  
    }  
    printf("Tong cot %d : %d\n", i, tong);  
}  
return 0;  
}

Output :

Tong hang 0 : 11 Tong hang 1 : 20 Tong hang 2 : 15 Tong hang 3 : 15 Tong cot 0 : 18 Tong cot 1 : 15 Tong cot 2 : 14 Tong cot 3 : 14

Ví dụ 2 : Tìm hàng có nhiều số nguyên tố nhất

include "stdio.h"

include "math.h"

int prime(int n){

for(int i = 2; i <= sqrt(n); i++){  
    if(n % i == 0) return false;  
}  
return n > 1;  
} int main(){
int n = 4, m = 4;  
int a[4][4] = {  
    {3, 1, 0, 7},  
    {2, 5, 10, 3},  
    {3, 7, 4, 1},  
    {10, 2, 0, 3}  
};  
int res = 0, hang = -1;  
for(int i = 0; i < n; i++){  
    int dem = 0;  
    for(int j = 0; j < m; j++){  
        if(prime(a[i][j])){  
            ++dem;  
        }  
    }  
    if(dem > res){  
        res = dem; hang = i;  
    }  
}  
printf("Hang %d co nhieu so nguyen to nhat\n", hang);  
printf("So luong so nguyen to o hang %d : %d\n", hang, res);  
return 0;  
}

Output :

Hang 1 co nhieu so nguyen to nhat So luong so nguyen to o hang 1 : 3

Ví dụ 3 : Tìm cột có nhiều số nguyên tố nhất, nếu có nhiều cột có cùng số nguyên tố thì chọn cột có số thứ tự lớn hơn

include "stdio.h"

include "math.h"

int prime(int n){

for(int i = 2; i <= sqrt(n); i++){  
    if(n % i == 0) return false;  
}  
return n > 1;  
} int main(){
int n = 4, m = 4;  
int a[4][4] = {  
    {3, 1, 0, 7},  
    {2, 5, 10, 3},  
    {3, 7, 4, 1},  
    {10, 2, 0, 3}  
};  
int res = 0, cot = -1;  
for(int i = 0; i < m; i++){  
    int dem = 0;  
    for(int j = 0; j < n; j++){  
        if(prime(a[j][i])){  
            ++dem;  
        }  
    }  
    if(dem >= res){  
        res = dem; cot = i;  
    }  
}  
printf("Cot %d co nhieu so nguyen to nhat\n", cot);  
printf("So luong so nguyen to o cot %d : %d\n", cot, res);  
return 0;  
}

Output :

Cot 3 co nhieu so nguyen to nhat So luong so nguyen to o cot 3 : 3


3. Hoán Vị Hàng, Cột

Để hoán vị 2 hàng của mảng 2 chiều thì bạn duyệt qua từng cột còn để hoán vị 2 cột thì bạn lại duyệt qua từng hàng.

Ví dụ 1 : Bài toán hoán vị 2 hàng

Gia tri nho nhat : 0 Gia tri lon nhat : 10

0

Output :

Gia tri nho nhat : 0 Gia tri lon nhat : 10

1

Ví dụ 2 : Bài toán hoán vị 2 cột

Gia tri nho nhat : 0 Gia tri lon nhat : 10

2

Output :

Gia tri nho nhat : 0 Gia tri lon nhat : 10

3


4. Sắp Xếp Ma Trận Theo Hàng, Cột

Sắp xếp theo hàng

Sắp xếp theo hàng trên ma trận thì bạn có thể tự code một hàm sắp xếp mảng 1 chiều sau đó áp dụng với từng hàng của mảng 2 chiều.

Như mình có nhắc ở phần lý thuyết mảng 2 chiều thì mảng 2 chiều thực chất chính là 1 mảng các mảng 1 chiều, mỗi dòng trên mảng 2 chiều chính là 1 mảng 1 chiều.