Cách xóa các số hoàn hảo trong mảng

Chào mọi người, mình có chương trình xóa các số hoàn hảo trong mảng một chiều A gồm n phần tử và xuất ra lại mảng A sau khi xóa nhưng hàm xóa của mình thực chất chỉ là xuất lại các số không phải là số hoàn hảo còn mảng A thì lại giữ nguyên, có cách nào để xóa hẳn các số hoàn hảo trong mảng A không ạ?

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

void nhapmang(char A[][100],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("Nhap phan tu A[%d]=",i);
		scanf("%s",&A[i]);
	}
}
void xuatmang(char A[][100],int n)
{
	for(int i=0;i<n;i++)
	{
		printf(" %s ",A[i]);
	}
}
int kttunhien(char *s)
{
	int i=0;
	while (i<strlen(s))
	{
		if(s[i]<'0'||s[i]>'9') return 0;
		i++;
	}
	return 1;
}
int shh(int n)
{
	int tg=0;
	if(n<1) return 0;
	for(int i=1;i<n;i++)
	{
		if(n%i==0) tg=tg+i;
	}
	if(n==tg) return 1;
	else return 0;
}
void xoashh(char A[][100],int n)
{
	int tg;
	for(int i=0;i<n;i++)
	{
		if(kttunhien(A[i]))
		{
			tg=atoi(A[i]);
			if(shh(tg)==0) printf(" %s ",A[i]);
		}
		else printf(" %s ",A[i]);
	}
}
main()
{
	char A[100][100];
	int n;
	printf("Nhap so phan tu trong mang n=");
	scanf("%d",&n);
	while(n<10)
	{
		printf("Nhap lai n>=10.");
		printf("\nNhap so phan tu n=");
		scanf("%d",&n);
	}
	nhapmang(A,n);
	printf("Mang A la:");
	xuatmang(A,n);
	printf("\nMang A sau khi xoa cac so hoan hao la:");
	xoashh(A,n);
	getch();
}

Có thể làm thế này:

  • Copy mảng A thành mảng B, xóa và khởi tạo lại mảng A
  • Kiểm tra các phần tử của mảng B, nếu không phải là số hoàn hảo thì lần lượt gán vào cho mảng A


for (i = 0; i < n; i++)
{
    //Copy mảng A thành mảng B
    B[i] = A[i];
    A[i] = 0; // giả sử gán giá trị = 0 là để xóa phần tử A[i] 
}
int j = 0;
for (i = 0; i < n; i++)
    if (B[i] là số hoàn hảo)
       A[j++] = B[i];
2 Likes

Mảng của mình là mảng chuỗi nên không thể làm như thế được.

Đấy là ý tưởng, còn mảng chuỗi thì gán giá trị kiểu chuỗi

1 Like

Cảm ơn bạn, mình làm được rồi mà mảng chuỗi có phải là mảng một chiều không bạn?

Mảng chuỗi thực chất là mảng hai chiều bạn nhé
ví dụ mảng chuỗi như sau:
{“chuoi1”, “chuoi2”,“chuoi3”} là một mảng char A[3][6]

2 Likes

Nếu yêu cầu nhập mảng một chiều A gồm n phần tử mà mình nhập mảng chuỗi như thế này thì có được không bạn?

Như thế là không đúng yêu cầu của đề bài

đề là như thế này sao bạn lại nhập mảng kiểu char vậy?

2 Likes

Vì yêu cầu phân biệt 2 kiểu int với 2.0 kiểu float nên mình phải nhập vậy để kiểm tra.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?