01/10/2018, 00:36
Đếm n số chính phương đầu tiên (n nguyên dương)
Đề bài : nhập số nguyên dương n (n>0).tìm n số chính phương đầu tiên.e xem mãi mà không tìm ra lỗi sai mong mọi người giúp e với.
code:
#include <iostream>
using namespace std;
//nhap so nguyen duong n
void input(int &n)
{
do
{
cout << "nhap so nguyen duong n= ";
cin >> n;
} while (n <= 0);
}
//kiem tra so chinh phuong
int SoCP(int n)
{
if (n < 4)
return 0;
int a = (int)sqrt((float)(n));
if (a*a == n)
return 1;
return 0;
}
//dem n so chinh phuong
int dem(int n)
{
int i = 1;
int demso = 0;
while (demso <= n)
{
for (int j = 1; j <= i; j++)
{
if (SoCP(j) == 1)
{
demso++;
}
return i;
}
i++;
}
}
// xuat gia tri ra ngoai man hinh
void main()
{
int n;
input(n);
dem(n);
cout << " " << dem;
system("pause");
}
Bài liên quan
Sai ở đoạn sau:
Khi hàm return, thì nó ko thực hiện nữa.
Ở trên với j = 1 nó là số chính phương -> nó return i và không thực hiện vòng lặp nữa. Dẫn tới sai kq.
ủa, n số chính phương đầu tiên là 1^2 + 2^2 + … + n^2 mà?
làm chi cực thế
bạn ơi mình để đk là n<4 thì return 0 rồi nên nếu j=1 thì không in ra kết quả, mà mình thử dùng hàm void để khai báo đếm thì nó cũng không ra, nếu có thể sửa giúp mình hay chỉ ra lỗi rõ hơn 1 tý được không?
cảm ơn bạn, ý tưởng hay để mình source lại, có vẻ như sẽ khỏe hơn rất nhiều
Ở trên mình nói hơi sai chút.
Nói chung, khi vô vòng lặp for ngay khi j = 1, ko cần check nó là số chính phương hay ko. Thì có dòng return, khi tới gặp dòng đó nên nó trả về hàm luôn và ko thực hiện nữa.
đã cố gắng sửa nhưng vẫn không chạy được, bạn có thể sửa giúp mình được không?
Code bạn sai hơi nh lỗi.
1/ return trong for v nên hàm chưa làm xong đã tịt
-> Đặt return i cuối thân hàm. Mà mình cũng ko rõ là bạn viết thuật ntn mà dùng tới i?? Nên xin phép sửa lại thành ntn
(Bạn có thể lấy ý tưởng của a nxphuc để code cũng được)
2/ Bạn gọi hàm mà ko gán giá trị trả về cho nó, rồi lại in ra tên hàm nên sai lần nữa.
-> Gán giá trị trả về cho 1 biến bất kỳ và in ra
cảm ơn bạn, mình dùng thuật của anh nxphuc thi ra rồi nhưng vẫn muốn sửa cái code do mình viết