Help!! Nhập dãy số kiểm tra xem có snt rồi in ra vi trí, giá trị snt min ??

#include<stdio.h>
#include<math.h>
#include<conio.h>


int KTSNTMin(int,int);
int KTSNT(int,int);




int KTSNTMin(int a[], int n)
{
int i,min;
min=a[0];
for(i=0;i<n;i++)
if(min>a)
min=a;
return min;
}
int KTSNT(int a[], int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=2;j<=a;j++)
if(a%j==0) return 0;
}
return 1;
}


main()
{
int n,a[20],i,num;
printf("Nhap n: "); scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("So thu %d la:", i+1);
scanf("%d", &a);
}
if(KTSNT(a,i))
num=KTSNTMin(a,i) ;
printf("So nguyen to nho nhat la: %d \n", num);
printf("Vi tri cua so do la : %d", i);
}
 
  • Chủ đề
    c++
  • tengiday

    Happy life
    Bạn viết hàm kiểm tra có số nguyên tố trong mảng hay không, KTSNT, cũng được, nhưng khi KTSNTMin thì không đúng bởi vì đoạn code đó chỉ là tìm số nhỏ nhất trong mảng mà thôi. Thật ra bạn nên kết hợp 2 cái lại:
    Mã:
    bool isPrime(int x) {
        // kiểm tra x có phải là số nguyên tố hay không.
    }
    
    // Trả ra vị trí snt nhỏ nhất trong mảng. Trả ra -1 nếu không có snt nào.
    int KTSNT(int a[], int n) {
        int pos = -1;    // giả sử mảng không có snt nào.
        for (int i = 0; i < n; ++i)
            // Gọi hàm isPrime(a[i]) ở trên để kiểm tra a[i] có phải là snt không.
            // Nếu là snt thì kiểm tra xem nó có nhỏ hơn snt a[pos] (nếu có) hay không.
            if (isPrime(a[i]) && (pos < 0 || a[i] < a[pos]))
                pos = i;
        return pos;
    }
    
    int main() {
        nhập dữ liệu mảng 'a'.
        int t = KTSNT(a, n);
        if (t == -1)
            printf("Không có snt nào trong mảng.\n");
        else
            printf("SNT nhỏ nhất là %d ở vị trí %d.\n", a[t], t);
        return 0;
    }
    PS: Bạn có thể tham khảo hàm kiểm tra xem 1 số có phải là snt không ở trong box này cho nó tối ưu hơn.
     

    Thống kê

    Chủ đề
    100,746
    Bài viết
    467,573
    Thành viên
    339,849
    Thành viên mới nhất
    chicstore.accessories
    Top