30/09/2018, 20:47
Lỗi c++ cơ bản chưa hiểu
Đề bài là nhập 1 số kiểm tra số đó có phải số nguyên tố không ,có thì in ra các số nguyên tố đứng trước nó,1 hàng chứa 5 số và các số cách nhau 1 dấu tab.
Thuật toán của mình là tạo ra 1 biến đếm và cho nó =1(int dem=1;)
chạy vòng lặp từ 1 tới n
kiểm tra các số trong vòng lặp có phải SNT hay không,có thì xuất nó ra và tăng biếm đếm lên 1(dem++;)
khi nào biến đếm = 5 thì xuống hàng
dưới đây là code của mình mogn các bạn chỉ cho mình cái sai:
#include < iostream>
#include < conio.h>
using namespace std;
bool KiemTraSoNguyenTo(int n);
int NhapSo();
void Inso(int n);
int main()
{
int n = NhapSo();
if (KiemTraSoNguyenTo(n) == true)
{
cout << endl << "Yes
";
}
else
{
cout << endl << "No
";
}
Inso(n);
_getch();
return 1;
}
bool KiemTraSoNguyenTo(int n)
{
int i;
if (n < 2)
{
return false;
}
if (n > 2)
for (i = 2; i <=sqrt(n); i++)
{
if (n%i == 0)
{
return false;
}
}
return true;
}
int NhapSo()
{
int n;
cout << endl << "Nhap vao 1 so nguyen duong : ";
cin >> n;
return n;
}
void Inso(int n)
{
if (KiemTraSoNguyenTo(n)==true)
{
int i, dem = 1;
for (i = 0; i <= n; i++)
{
if (KiemTraSoNguyenTo(i) == true)
cout << i << ' ';
dem++;
if (dem==5)
cout <<i<< '
';
}
}
}
Bài liên quan
nghĩa là bạn chi muốn in duy nhất 1 hàng nếu trước số nguyên tố n có nhiều hơn 5 số nguyên tố? <= mình không nghĩ đề bài yêu cầy này mà là cứ 5 số thành một hàng. Do đó, bạn phải dùng phép chia nguyên để nếu đếm chia hết cho 5 thì xuống hàng chứ nhỉ?
sửa trong hàm inso
ý là khi nhập 31 thì máy sẽ in ra:
2 3 5 7 11 (xuống hàng)
13 17 19 23 29 (xuống hàng)
ý mình là tạo ra 1 biến đếm để đếm i(khi i đủ 5 số thì sẽ cho xuống hàng)
cảm ơn bạn nhưng không được như ý muốn:
mình quên mất. bạn gán lại biến dem = 0 khi mà dem == 5
cái này có phải là:
Chạy từ 2 tới n,nếu nó là số nguyên tố thì xuất i kèm 1 dấu tab(cộng biến đếm lên 1)
-cộng tới khi nào biến dem==5 thì xuống dòng và reset biến đếm =0 (khi số lớn)
Cảm ơn bạn mình ngộ ra rồi