30/09/2018, 21:44

Lỗi sai về mảng

Mọi người chỉ lỗi sai giúp mình với. Đề bài : nhập xuất mảng,tìm vị trí số hoàn thiện cuối cùng của mảng

#include<conio.h>
#include<stdio.h>
#define MAX 100

void nhap_mang(int mang[],int &n)
{
	do
	{
		printf("139: vi tri hoan thien cuoi cung
");
		printf("nhap va so phan tu cho mang(0<mang<=100) :");
		scanf_s("%d",&n);
		if(n<0||n>MAX)
		printf("kiem tra dieu kien va nhap lai !!!");
	}
	while(n<0||n>MAX);
	for(int i=0;i<n;i++)
	{
		printf("mang[%d]:",i);
		scanf_s("%d",&mang[i]);
	}
}
void mang_o(int mang[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf(" %d ",mang[i]);
	}
}
int de_bai(int mang[],int &n)
{
	int i;
	int tong=0;
	for(i=n-1;i>0;i--)
	{
		mang[i];
		for(int j=1;j<mang[i];j++)
		{
			if(mang[i]%j==0)
			{tong=tong+j;}
			
		}
	}
	if(tong==mang[i]);
		return i;
	}
int main()
{
	int n;
	int mang[MAX];
	nhap_mang(mang,n);
	mang_o(mang,n);
	de_bai(mang,n);
	printf("vi tri hoan thien cuoi cung la %d",de_bai(mang,n));
	_getch();
	return 0;
}

X viết 23:58 ngày 30/09/2018

Bạn thử viết cho mình một cái hàm riêng dùng để kiểm tra số hoàn thiện xem?
Nếu là số hoàn thiện thì trả về 1, ngược lại trả về 0.

DOAN VO TRONG HIEU viết 23:58 ngày 30/09/2018
#include<conio.h>
#include<stdio.h>
void main()
{
	int m=0;
	int a;
	printf("nhap vao mot so duong :");
	scanf_s("%d",&a);
	for(int i=1;i<a;i++)
	{
		if(a%i==0)
		{m=m+i;}
	}
	if(m=a)
		printf("%d la so hoanchinh",a);
	else 
		printf("0");
_getch();
}
Lưu Thành Vương viết 23:55 ngày 30/09/2018

if(tong==mang[i]);
return i;
}

cái này nhét vào vòng for

DOAN VO TRONG HIEU viết 23:46 ngày 30/09/2018

mình thử và ko được bạn ak

Lưu Thành Vương viết 23:58 ngày 30/09/2018

ra khỏi vòng for thứ 2 thì cho lại tong=0 và cuối hàm return -1; nếu không có phần tử nào

Lưu Thành Vương viết 23:50 ngày 30/09/2018

if(tong==mang[i]);
return i;

Giờ mới để ý, bỏ ; chỗ if đi

Người bí ẩn viết 23:53 ngày 30/09/2018

5 số bạn nhập trong hình có số nào là hoàn thiện đâu ?
Mà bạn nên nói sơ về thuật toán của bạn xíu để người fix sẽ hiểu rõ và tìm lỗi nhanh hơn chứ như vầy tìm lâu lắm

Mình xin “phát biểu” thuật toán của mình nhé: Viết 1 hàm kiểm tra số hoàn thiện (bool). Sau đó trong hàm de_bai bạn chỉ việc tạo 1 vòng for duyệt từ cuối mảng đến đầu mảng ( for (int i = n - 1; i >= 0; i--) ) và trong vòng for đó, nếu phần tử đang xét là số hoàn thiện thì return n

DOAN VO TRONG HIEU viết 23:44 ngày 30/09/2018

Lưu Thành Vương viết 23:59 ngày 30/09/2018
int de_bai(int mang[],int &n)
{
	int i;
	int tong=0;
	for(i=n-1;i>0;i--)
	{
		for(int j=1;j<mang[i];j++)
		{
			if(mang[i]%j==0)
			{
			    tong=tong+j;
                        }
                }
                if(tong==mang[i])
                        return i+1;
                tong=0;
        }
	return -1;
}
DOAN VO TRONG HIEU viết 23:54 ngày 30/09/2018

Giai thích vì sao return i+1 vậy bạn

Lưu Thành Vương viết 23:56 ngày 30/09/2018

return i cũng dc. Cái này thì do mảng bắt đầu từ 0 mà theo người dùng thì bắt đầu từ 1 =))

Bài liên quan
0