PDA

View Full Version : E là thành viên mới. Mong mọi người giúp đỡ cho bài nì



Untitled
13-12-2007, 15:28
Đề: Viết chương trình nhập vào số tự nhiên n. Kiểm tra xem từ 1 --> n có bao nhiêu số hoàn hảo.
Số hoàn hảo là số có tổng các ước (trừ chính nó) bằng chính nó. VD: số 6.6=1+2+3.
E mới học đến câu lệnh If then, While do và For to do thôi.Xin cám ơn mọi người trước.

extjs
13-12-2007, 16:10
viết 1 hàm kiểm tra 1 số có phải số hoàn hảo không, lặp từ 1-n, kiểm tra từng số nếu hàm trả về true thì xuất số đó ra
Gợi ý hàm kiểm tra số hoàn hảo (tớ không học pascal, viết code giả = java nhé :w00t:)



boolean perfect (int n)
{ // tính tổng ước số của n
S=0;
Với mọi i=1 --> =n/2
Nếu (n chia chẵn cho i) S=S+i;
return (S==n);
}

phuclun
13-12-2007, 16:25
dem:=0;
for i:=3 to n do{chạy từ 3 vì dưới nó ko có số hoàn hảo nào}
begin
tong:=1;{vì số nào cũng có ước là 1 hết}
for j:=2 to i-1 do{chạy đến i-1 để tránh ước i}
if (i mod j)=0 then
tong:=tong+j;
if tong=i then
dem:=dem+1;
end;

Chúc bạn vui vẻ.

mr_invincible
13-12-2007, 18:06
Sửa bài của bạn phuclun chút nhé
Ở vòng lặp for j:=2 to i-1 do
có thể đổi là for j:=2 to i div 2 do
bởi vì sau i div 2 không còn số nào là ước của i nữa (tất nhiên trừ i)

phuclun
13-12-2007, 18:54
ừ ,ừ đúng rồi,chỉ đến đó thoai.Thanks bác invi.

huynhkim
13-12-2007, 19:52
ta chỉ cần cho i-> n-1 có đc hok ?
nếu n mod i=0 thì s:=s+i;
if s=i then dem:=dem+1;

tranvanho
13-12-2007, 21:28
viết 1 hàm kiểm tra 1 số có phải số hoàn hảo không, lặp từ 1-n, kiểm tra từng số nếu hàm trả về true thì xuất số đó ra
Gợi ý hàm kiểm tra số hoàn hảo (tớ không học pascal, viết code giả = java nhé :w00t:)



boolean perfect (int n)
{ // tính tổng ước số của n
S=0;
Với mọi i=1 --> =n/2
Nếu (n chia chẵn cho i) S=S+i;
return (S==n);
}



đây là box pascal nhé bác

Untitled
19-12-2007, 19:43
Cám ơn mọi người. Nhưng mà thầy em mới yêu cầu cũng bài toán trên, xuất ra các số hoàn hảo từ 1 --> n. Xin mọi người giúp em lần này nữa.

tranvanho
19-12-2007, 19:55
thì kiểm tra xong rùi xuất
nếu đúng thì write vậy thui (thế mà cũng hỏi dc kì ghê)^_^

Untitled
19-12-2007, 20:01
Đây là ct mà em tự vít:
Var i,m,n:integer;
Begin
Readln(n); tong:=1;
For m:=6 to n do
begin
for i:=2 to (m div 2) do
begin
if (m mod i)=0 then tong:=tong+i;
if (tong=m) then writeln(tong);
end;
end;
readln
End.
E tìm ko ra lỗi nhưng mà chạy ct cũng chả dc kết quả gì. :((

mr_invincible
19-12-2007, 20:05
Bạn phải cho lệnh tong:=1 vào trong vòng lặp thì mới đúng vì nếu không thì sau mỗi lần kiểm tra một số thì tong đạt giá trị ban đầu khác (khác 1)
Ngoài ra câu lệnh If (tong=m) then Writeln(tong); cần phải đưa ra ngoài vòng lặp i (có thể bỏ luôn begin và end của vòng lặp i này) nếu không thì sẽ in ra số đó nhiều lần

Untitled
19-12-2007, 20:23
E đã thử và đã thành công. Thanks anh ạ :).