01/10/2018, 17:16
Xóa tất cả số nguyên tố có trong mảng
vd như khi em nhập 3 5 7 9 , thì nó chỉ xoá 3 và 7 , giữ lại 5 và 9
#include<stdio.h>
int snt(int n)
{
int d=0;
for(int i=1;i<=n;i++)
{
if(n%i==0)
d=d+1;
}
if(d==2)
return 1;
else return 0;
}
void xoamang(int n,int x,int A[])
{
for(int i=x;i<n;i++)
{
A[i]=A[i+1];
}
n=n-1;
}
void main()
{
int n,A[100],i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&A[i]);
for(i=0;i<n;i++)
{
if(snt(A[i])==1)
{
xoamang(n,i,A);
}
n=n-1;
}
for(i=0;i<n;i++)
printf("%d ",A[i]);
}
Bài liên quan
5?
Khi xóa xong thì bạn còn thiếu một bước Thực ra để dễ xóa (hàng loạt nhé) thì có thể ghi đè mảng lên chính nó. (phải suy nghĩ “out of the box” chút)
Hình như đây là bài toán dính đến sàng Eratosthenes. Nếu đúng, cứ cầm cây ra mà chọc
Không phải Sàng Eratosthenes chạy từ M đến N mà.
Dạng này là xét và lọc (số) thôi.
Thế thì khả năng cái mảng sau khi lọc sẽ là tập con của cái sàng Eratosthenes?
Không lọc lại chỉ còn hợp số thôi.
for(i=0;i<n;)
{
if(snt(A[i])==1)
{
xoamang(n,i,A);
continue;
}
n=n-1;
i++
}
Các hàm
snt
,xoamang
là tạm ổnVấn đề xảy ra ở vòng
for
khi xóa số nguyên tố:Giả sử ta có mảng theo trật tự sau
Khi đó hàm xóa mảng sẽ dồn
snt(i+1)
lên vị trí ở ôi
. Nhưng khi đó vòngfor
đã nhảy lên ôi+1
nên số này không bị xóa.Khi xóa mảng thì n mới bị giảm.
e cám ơn các anh nhìu lắm ạ