PDA

View Full Version : thuật toán tìm số hoàn hảo với lập trình C



hoangtung235
15-04-2009, 10:19 AM
mọi người giúp mình tìm thuật toán tìm số hoàn hảo với

Loveanygirls
15-04-2009, 11:47 AM
#include <conio.h>
#include <stdio.h>

bool SOHOANHAO(int);
void NHAPXUAT();



int main()
{
int n;
NHAPXUAT();
getch();
return 0;

}


bool SOHOANHAO(int n)
{
int tong=0;
if(n<1)
return false;
else
{
for(int i=1;i<(n/2)+1;i++)
{
if(n%i==0)
tong+=i;
}
if(tong==n)
return true;
else
return false;
}
}
void NHAPXUAT()
{
int n;
printf("Nhap vao so n: ");scanf("%d",&n);
if(SOHOANHAO(n))
printf("%d la so hoan hao!",n);
else
printf("%d KHONG phai so hoan hao!",n);
}

clementboy03
15-04-2009, 06:43 PM
bool SOHOANHAO(int)

Love cho tui hỏi là bool là kiểu hàm gì :)

trungkien45
15-04-2009, 06:53 PM
Bool là kiểu hàm logic. Nó chỉ trả về (return) 2 giá trị Đúng (true) hoặc Sai (false). Bạn ạ.

clementboy03
15-04-2009, 06:58 PM
Vậy sao love lại ko dùng int SOHOANHAO(int). Nó cũng trả về 2 giá trị đúng( return 1) hoặc sai ( return 0). Cho tui hỏi có sự khác biệt nhau ko ?

Loveanygirls
15-04-2009, 07:13 PM
Không khác biệt nhau là mấy!
Nếu dùng int KIEMTRASOHOANHAO thì hơi phí, vì mình chỉ cần kiểm tra nó là số hoàn hảo hay không (YES/NO). Trong khi int KTSHH thì kiểu int có thể trả về nhiều giá trị, có thể là 1,2,3....

Mình không làm thì thôi, làm là sẽ post full code. Nhưng mà cái đề bài bạn nêu ra hơi mập mờ: "Tìm số hoàn hảo", nên mình viết thành hàm kiểm tra số hoàn hảo thôi. Bạn nhập n=28 sẽ được thông báo là số hoàn hảo.

trubavuong
15-04-2009, 08:15 PM
Nhưng trong C đâu có kiểu dữ liệu này ?

Loveanygirls
15-04-2009, 08:48 PM
Uh! Đúng là trong C không có kiểu bool thật, lúc trước thầy có nói mà mình quên mất. Cái này là do học lắm ngôn ngữ lập trình nên bây giờ nó tẩu hỏa thế đấy! Trước học Pascal, sau học C, giờ đang học C++. Dễ nhầm nhất là 2 chú C và C++!!
Chạy trên DevC++ bạn ạ!

Video này là bằng chứng:


http://www.mediafire.com/?j0xojpjbosm
Mirror:
http://rapidshare.com/files/221645820/Sohoanhao.rar



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

int SOHOANHAO(int);
void NHAPXUAT();



int main()
{
int n;
NHAPXUAT();
getch();
return 0;

}


int SOHOANHAO(int n)
{
int tong=0;
if(n<1)
return 0;
else
{
for(int i=1;i<(n/2)+1;i++)
{
if(n%i==0)
tong+=i;
}
if(tong==n)
return 1;
else
return 0;
}
}
void NHAPXUAT()
{
int n;
printf("Nhap vao so n: ");scanf("%d",&n);
if(SOHOANHAO(n))
printf("%d la so hoan hao!",n);
else
printf("%d KHONG phai so hoan hao!",n);
}

Đã edited!

clementboy03
15-04-2009, 09:44 PM
Vậy cứ khai báo int sohoanhao(int x) và dùng kĩ thuật cờ hiệu cho nó lành :)

xiu_coi
16-04-2009, 01:23 AM
Ủa mình vẫn đc dạy biến bool trong C mà nhỉ ????
Số hoàn hảo là số có tổng bằng tích của tất cả các ước của nó
Vd: 6 = 3 + 2 +1; 28 = 1 + 2 + 4 + 7 + 14
Bài này thì cậu viết 1 hàm tìm tất cả các ước của n rùi + nó lại. Nếu = n thì là số hoàn hảo

langman
16-04-2009, 09:43 AM
Ủa mình vẫn đc dạy biến bool trong C mà nhỉ ????
Số hoàn hảo là số có tổng bằng tích của tất cả các ước của nó
Vd: 6 = 3 + 2 +1; 28 = 1 + 2 + 4 + 7 + 14
Bài này thì cậu viết 1 hàm tìm tất cả các ước của n rùi + nó lại. Nếu = n thì là số hoàn hảo

Trong C thuần túy ko có kiểu bool đâu xíu còi à

tieudao92
06-01-2011, 08:57 PM
//Bai nay de hieu ne.hi`.
//1 so Perfect la tong cac UCNN cua no bang chinh no.
#include<iostream.h>
#include<conio.h>
int soperfect(int n)
{
int tong=0;
int i;
for(i=1;i<n && tong<=n;i++)
if(n%i==0)
tong+=i;
if(tong==n) return 1;
else return 0;
}
main()
{
clrscr();
int n;
cout<<"Nhap vao 1 So de Kiem tra";cin>>n;
if(soperfect(n)==1) cout<<endl<<n<<" is a number perfect";
else cout<<endl<<n<<"isn't a number perfect";
getch();
}

The terminator
06-01-2011, 09:16 PM
Hàm thế này thì đơn giản hơn nhiều


char soperfect(int n)
{
int tong=1,i;
for(i=n/2;i>1;i--)
if(n%i==0)
tong+=i;
if(tong==n) return 1;
return 0;
}

dragonheart26
10-01-2011, 10:36 PM
Bài của bạn đây này, mình viết bằng cách đơn giản nhất đây




#include< stdio.h>

void main()
{
int n;
printf("Nhap so nguyen duong n(n>0): ");
scanf("%d", &n);

int s=0;
for(int i=1; i<n; i++)
{
if(n%i==0)
s=s+i;
}
if(s==n)
printf("La so hoan hao\n");
else
printf("dek la so hoan hao\n");
}