Bài toán:Tìm vị trí số nguyên tố lớn nhất/nhỏ nhất trong mảng
Input: mảng a có n phần tử
Xử lý: Hàm kiểm tra số nguyên tố
http://sinhvientot.net/so-nguyen-to-la-gi-ham-tim-so-nguyen-to/
Duyệt mảng đê tìm số nguyên tố đầu tiên
Gán vị trí vừa mới tìm được, thoát khỏi vòng lặp
Nếu không có số nguyên tố trong mảng thì trả về -1
Nếu tìm được số nguyên tố thì duyệt từ vị ví số nguyên tố đầu tiên +1 đến hết mảng
Nếu là số nguyên tố và số nguyên tố lớn hơn/nhỏ hơn số nguyên tố đầu tiên thì cập nhật vị trí, duyệt đến hết sẽ tìm được vị trí số nguyên tố lớn nhất/nhỏ nhất
Output: mảng không có số nguyên tố -1, vị trí số nguyên tố lớn nhất/nhỏ nhất trong mảng
Hàm tìm vị trí số nguyên tố lớn nhất
int VtriSNTLonNhat(int a[], int n) { int vt,d,i; for( i=0 ; i<n ; i++ ) if(SNT(a[i])==1) { d=i; break; } if(i==n) return -1; vt=d; for(i=vt+1;i<n;i++ ) if(SNT(a[i])==1 && a[i]>a[vt]) vt=i; return vt; }
Hàm tìm vị trí số nguyên tố nhỏ nhất
int VtriSNTNhoNhat(int a[], int n) { int vt,d,i; for( i=0 ; i<n ; i++ ) if(SNT(a[i])==1) { d=i; break; } if(i==n) return -1; vt=d; for(i=vt+1;i<n;i++ ) if(SNT(a[i])==1 && a[i]<a[vt]) vt=i; return vt; }
Chương trình: Tìm vị trí số nguyên tố lớn nhất trong mảng
#include<stdio.h> #include<conio.h> #include <stdlib.h> #define MAX 100 void nhapmang(int a[], int &n); void xuatmang(int a[], int n); int SNT(int n); int VtriSNTLonNhat(int a[], int n); void main() { int a[MAX],n; nhapmang(a,n); printf("\nNoi dung cua mang"); xuatmang(a,n); if(VtriSNTLonNhat(a,n)==-1) printf("\nTrong mang khong co SNT "); else printf("\nVi tri SNT lon nhat trong mang la: %d",VtriSNTLonNhat(a,n)); printf("\nChuc cac ban hoc tot"); getch(); } void nhapmang(int a[], int &n) { do { printf("\nSo phan tu trong mang "); scanf("%d",&n); }while(n<=0 && n>100); for(int i=0 ; i<n ; i++ ) { printf("\nSo phan tu a[%d] la: ",i); scanf("%d",&a[i]); } } void xuatmang(int a[], int n) { for(int i=0 ; i<n ; i++ ) printf("%4d",a[i]); } 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 VtriSNTLonNhat(int a[], int n) { int vt,d,i; for( i=0 ; i<n ; i++ ) if(SNT(a[i])==1) { d=i; break; } if(i==n) return -1; vt=d; for(i=vt+1;i<n;i++ ) if(SNT(a[i])==1 && a[i]>a[vt]) vt=i; return vt; }
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 bạn thành công.
Xem thêm: Tìm số chẵn lớn nhất/nhỏ nhất trong mảng