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;
}
Quang Minh viết 17:00 ngày 01/10/2018

Hàm isPrime chưa loại trường hợp a[i]=1 hoặc a[i]=0
Có gì mình edit lại sau

Quang Minh viết 16:53 ngày 01/10/2018

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

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

bool isPrimeNumber(int n)
{
     if (n<2) return false;
     int temp=(int)sqrt(n);
     for (int i=2;i<=temp;i++)
       if (n%i==0) return false;
     return true;
}

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(isPrimeNumber(a[i])){
            arrPrime[count] = a[i];
            count++;
        }
    }

    sort(arrPrime,arrPrime+count);

    count = 0;

    for(int i = 0; i < n; i++){

        if(isPrimeNumber(a[i])){
            a[i]=arrPrime[count];
            count++;
        }
    }

    for(int i = 0; i < n ; i++) {
        cout << a[i] << "\t";
    }
    return 0;
}
Văn Long viết 16:56 ngày 01/10/2018

cảm ơn bạn nhiều nhé

Đoàn Trọng Hiếu viết 16:54 ngày 01/10/2018

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

Fix không được, code hộ luôn => Nguy hiểm cho bạn nhận code

cảm ơn bạn nhiều nhé

Đượ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ê =))

Quang Minh viết 16:50 ngày 01/10/2018

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

Văn Long viết 17:00 ngày 01/10/2018

mình duyệt từ đầu mảng thì ổn , mà ko hiểu sao duyệt từ cuối có vấn đề

du0n9 viết 16:57 ngày 01/10/2018

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];

Bài liên quan
0