01/10/2018, 14:44
Nhờ mọi người sửa lỗi code
Mình làm bài này không biết sai ở đâu, mong mọi người có thể giúp em
Em cám ơn.
#include <iostream>
using namespace std;
void swap(int *xp, int *yp) {
int temp = *xp;
*xp = *yp;
*yp = temp;
}
void bubble(int arr[], int n) {
int i, j;
bool swapped;
for (i = 0; i < n-1; i++) {
swapped = false;
for (j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
swap(&arr[j], &arr[j+1]);
swapped = true;
}
}
if (swapped == false)
break;
}
}
int isPrime (int n) {
bool isPrime = true;
for(int i = 2; i <= n / 2; ++i) {
if(n % i == 0) {
isPrime = false;
break;
}
}
return isPrime;
}
int main() {
int n;
cin >> n;
int a[n];
int arrPrime[n];
int count = 0;
for(int i = 0; i < n; i++) {
cin >> a[i];
if( isPrime(a[i]) ) // kiểm tra số nt
arrPrime[count++] = a[i]; // gán vào mảng số nt
}
bubble(arrPrime, count); // xắp xếp mảng số nt
//sai từ đây ?
for(int i = (n-1) ; i >= 0; i--) { // duyệt từ cuối mảng
if( isPrime(a[i]) ) {
a[i] = arrPrime[count--]; // gán vào từ cuối
}
}
for(int i = 0; i < n ; i++) {
cout << a[i] << " " << i << "
" ;
}
return 0;
}
Bài liên quan
Hàm isPrime chưa loại trường hợp
a[i]=1
hoặca[i]=0
Có gì mình edit lại sau
code, thực ra mình cũng chẳng biết b sai chỗ nào, nên xin phép code lại từ đầu
cảm ơn bạn nhiều nhé
Fix không được, code hộ luôn => Nguy hiểm cho bạn nhận code
Được người khác code hộ, nhận luôn => Cực kỳ nguy hiểm cho bản thân.
Theo mình bạn @DepTraiNhatVinhBacBo không nên nhận code như vậy.
Bạn nên cố gắng debug rồi fixbug, bug càng khó cảm giác lúc fix xong càng phê =))
Thực sự thì code b đó ổn rồi á. Chỗ b nghi ngờ sai cũng nghi ngờ đúng rồi. Mình đổi thuật toán chỗ đó chứ mấy
Không hiểu vì sao b lại viết cái bubble sort nó ảo thế trong khi c++ nó hỗ trợ thư viện nên mình rút gọn lại
Và hàm số nt chặn trường hợp dưới 2 như mình nói là xong bài mà
Không hiểu sao nhìn bài này m thấy làm lại dễ hơn là ngồi sửa nên lỡ tay làm luôn
mình duyệt từ đầu mảng thì ổn , mà ko hiểu sao duyệt từ cuối có vấn đề
Do bạn viết
arrPrime[count++] = a[i];
nên count được cộng thêm 1 khi thêm số nt cuối cùng vào arrPrime.( count lớn hơn chỉ số mảng lớn nhất 1 đơn vị )
Vì vậy đến khi đọc lại arrPrime phải trừ count trước
a[i] = arrPrime[--count];