#include<stdio.h>
Nội dung chính
- Video giải thích chi tiết về Tìm giá trị lớn nhất và tìm giá trị nhỏ nhất của ma trân hai chiều trong lập trình C | Tự học lập trình C
- Bài toán tìm giá trị lớn thứ hai của mảng một chiều
- Video liên quan
using namespace std;
void nhapmang(int a[], int &n)
{ printf(“nhap so phan tu :” );
scanf(“%d”,&n);
for(int i=0;i<n;i++)
{ printf(” phan tu thu %d :”,i);
scanf(“%d”,&a[i]);
}
}
int xuatmang(int a[],int n)
{
printf(“mang da nhap \n”);
for(int i=0;i<n;i++)
{
printf(” %4d “,a[i]);
}
}
int timptlonthu2(int a[],int n)
{
int max=a[0];
for(int i=1;i<n;i++)
{
if(a[i]>max) max=a[i];
}
int max2=a[0];
for(int i=1;i<n;i++)
{
if(a[i]>max2 && a[i]<max) max2=a[i];
}
return max2;
}
int main()
{
int a[100],n;
nhapmang(a,n);
xuatmang(a,n);
printf(“phan tu lon thu 2 la: %d”,timptlonthu2(a,n));
return 0;
}
Bài toán: Tìm số nguyên tố lớn/nhỏ nhất trong ma trận
Input: mảng a có m dòng, n cột
Xử lý: duyệt mảng, tìm vị trí số nguyên tố lớn/nhỏ đầu tiên trong mảng
Giữ lại vị trí m,n vừa mới tìm được , rồi thoát khỏi vòng lặp
Nếu duyệt hết mảng mà không tìm được số nguyên tố lớn/nhỏ thì trả về giá trị -1
Duyệt mảng từ dòng +1, cột giữ nguyên vị trí tìm được ở trên
Nều là giá trị số nguyên tố lớn/nhỏ và giá trị số nguyên tố lớn/nhỏ hơngiá trị số nguyên tố lớn/nhỏ đầu tiên thì cập nhật lại giá trị vừa tìm được, duyệt đến hết mảng sẽ tìm được giá trị số nguyên tố lớn/nhỏ nhất
Output: ma trận không có số nguyên tố -1, giá trị nguyên tố lớn/nhỏ nhất
Hàm tìm SNT lớn nhất
int SNTMax(int a[][MAX], int m, int n)
{
int i,j,d,c,vtc,vtd,e,max;
for( i=0;i<m;i++)
{
for( j=0;j<n;j++)
{
if(SNT(a[i][j])==1)
{
d=i;
c=j;
e=a[i][j];
break;
}
}
}
if(i==m && j==n)
return -1;
vtd=d;
vtc=c;
max=e;
for( i=vtd+1;i<m;i++)
{
for( j=0;j<n;j++)
{
if(SNT(a[i][j])==1 && a[i][j]>max)
{
max=a[i][j];
}
}
}
return max;
}
Hàm tìm SNT nhỏ nhất
int SNTMin(int a[][MAX], int m, int n)
{
int i,j,d,c,vtc,vtd,e,max;
for( i=0;i<m;i++)
{
for( j=0;j<n;j++)
{
if(SNT(a[i][j])==1)
{
d=i;
c=j;
e=a[i][j];
break;
}
}
}
if(i==m && j==n)
return -1;
vtd=d;
vtc=c;
min=e;
for( i=vtd+1;i<m;i++)
{
for( j=0;j<n;j++)
{
if(SNT(a[i][j])==1 && a[i][j]<min)
{
min=a[i][j];
}
}
}
return min;
}
Chương trình tìm SNT lớn nhất
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAX 100
void nhapmang(int a[][MAX], int &m, int &n);
void xuatmang(int a[][MAX], int m, int n);
int SNT(int n);
int SNTMax(int a[][MAX], int m, int n);
void main()
{
int a[MAX][MAX], m,n;
nhapmang(a,m,n);
printf(“\nNoi dung cua ma tran\n”);
xuatmang(a,m,n);
if(SNTMax(a,m,n)==-1)
printf(“\nMang khong co so nguyen to “);
else
printf(“\nSo nguyen to lon nhat la: %d”,SNTMax(a,m,n));
getch();
}
void nhapmang(int a[][MAX], int &m, int &n)
{
int i,j;
do
{
printf(“nhap vao so dong cua ma tran: “);
scanf(“%d”,&m);
}while(m<=0);
do
{
printf(“nhap vao so cot cua ma tran: “);
scanf(“%d”,&n);
}while(n<=0);
for( i=0;i<m;i++)
{
for( j=0;j<n;j++)
{
printf(“\nSo phan tu a[%d][%d]: “,i,j);
scanf(“%d”,&a[i][j]);
}
}
}
void xuatmang(int a[][MAX], int m, int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf(“%5d”,a[i][j]);
}
printf(“\n”);
}
}
int SNT(int n)
{
int dem=0;
for(int i=1;i<=n;i++)
if(n%i==0)
dem++;
if(dem==2)
return 1;
else
return 0;
}
int SNTMax(int a[][MAX], int m, int n)
{
int i,j,d,c,vtc,vtd,e,max;
for( i=0;i<m;i++)
{
for( j=0;j<n;j++)
{
if(SNT(a[i][j])==1)
{
d=i;
c=j;
e=a[i][j];
break;
}
}
}
if(i==m && j==n)
return -1;
vtd=d;
vtc=c;
max=e;
for( i=vtd+1;i<m;i++)
{
for( j=0;j<n;j++)
{
if(SNT(a[i][j])==1 && a[i][j]>max)
{
max=a[i][j];
}
}
}
return max;
}
Mình chia sẽ code này đê các bạn tham khảo các vấn đề tương tự. Tuy nhiên các bạn nên tự làm lại, đừng nên copy. Nếu gặp vấn đề gì khó khăn, hoặc thắc mắc gì, các bạn có thể đặt câu hỏi ở cuối bài. Mình sẽ giải đáp.
Chúc các bạn thành công!
Xem thêm: Tìm số chẵn/lẻ lớn nhất trong ma trận
Tóm Tắt
Video giải thích chi tiết về Tìm giá trị lớn nhất và tìm giá trị nhỏ nhất của ma trân hai chiều trong lập trình C | Tự học lập trình C
#include <stdio.h>
int a[100][100];
int m, n; void nhapMaTran(int x[100][100], int &m, int &n){ do{ printf(“Nhap vao m va n: “); scanf(“%d%d”, &m, &n); }while(m<=0 || n<=0); for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ printf(“x[%d][%d]=”, i, j); scanf(“%d”, &x[i][j]); } }
} void xuatMaTran(int x[100][100], int m, int n){ printf(“\nMang: \n”); for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ printf(“%d\t”, a[i][j]); } printf(“\n”); }
} int timMax(int x[100][100], int m, int n){ int max = x[0][0]; for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ if(max<x[i][j]){ max = x[i][j]; } } } return max;
} int timMin(int x[100][100], int m, int n){ int min = x[0][0]; for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ if(min>x[i][j]){ min = x[i][j]; } } } return min;
} int main(){ nhapMaTran(a, m, n); xuatMaTran(a, m, n); printf(“Min = %d”, timMin(a, m, n)); printf(“Max = %d”, timMax(a, m, n));
}
67
/ 100
Viết chương trình kiểm tra giá trị lớn thứ hai của mảng một chiều ? Đây là một bài tập khá hay :D, nó không chỉ giúp chúng ta làm quen với mảng. Mà còn ôn lại kiến thức sử dụng câu lệnh if else , vòng lặp for câu lệnh continue và kĩ thuật gán biến để xử lý bài toán. Nhìn qua thì bài này có vẻ khá dễ nhưng nếu chọn cách khó thì nó lại khó. Vậy nên mình sẽ bỏ qua cách khó và chọn cách dễ để giải :D. Mình xin được bắt đầu bài viết.
Bạn vui lòng xem bài hướng dẫn chi tiết và đầy đủ hơn tại đây: Tìm số lớn thứ 2 trong mảng một chiều
Bài toán tìm giá trị lớn thứ hai của mảng một chiều
Đề bài: Trên ngôn ngữ lập trình C , hãy nhập vào một mảng gồm n phần tử Hãy viết chương trình tìm giá trị lớn thứ 2 của mảng vừa nhập và in kết quả ra màn hình.
Xác định input output:
input: Nhập n = 3 vậy mảng có 3 phần tử nhập mang[0] = 1 mang[1] = 2 và mang[3] = 3
output: 2
Ý tưởng :
- Khởi tạo một biến max gán giá trị cho nó bằng 0
- Sử dụng một vòng lặp for để kiểm tra điều kiện của n > 0 và nhập giá trị cho mảng
- Tiếp tục sử dụng vòng lặp for và câu lệnh if để lấy ra giá trị lớn nhất của mảng
- Sau đó khởi tạo một biến max2 gán giá trị cho nó bằng 0
- Tiếp tục sử dụng vòng lặp for và câu lệnh if else để bỏ max bằng câu lệnh continue và tìm ra max2
Nó khác với bài tìm thằng to nhất là tạo thêm thằng to thứ 2 , tìm được thằng to nhất bỏ nó đi sau đó tìm thằng to thứ 2.
Ok chỉ vậy thôi, bây giờ mình sẽ code và chú thích chi tiết ngay ở dưới.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<conio.h>
#include<stdio.h>
int main(){
int mang[30];
int n;
int max = 0;
int max2 = 0;
printf(“Nhap so phan tu cua mang: “);
scanf(“%d”,&n);
for(;n <= 0;)
{
printf(“n phai > 0 \n”);
printf(“Nhap lai n:”);
scanf(“%d”,&n);
}
// Kiem tra dieu kien cua n
printf(“Nhap gia tri cua mang:\n”);
for(int i = 0; i < n; i++)
{
printf(“a[%d]: “,i);
scanf(“%d”,&mang[i]);
}
// Nhap gia tri cua mang
for(int i = 0; i < n; i++){
if(max < mang[i])
{
max = mang[i];
}
}
// Gan gia tri lon nhat cua mang cho max
for(int i = 0; i < n; i++){
if(max == mang[i])
{
continue;
}
else if(max2 < mang[i]){
max2 = mang[i];
}
}
// Gan gia tri lon hai cua mang cho max2
printf(“Output:%d”,max2);
return 0;
}
Xem thêm bài viết về C/C++ tại đây