Vinh Quang

7 bundles
2 files17 days ago
2

Câu 18.

18. Cho dãy A có n số tư nhiên > = 2. Viết chương trình con đứa các số nguyên tố về đầu dãy, số thuận nghịch về giữa dãy, các số còn lại về cuối dãy. (các số vừa là số nguyên tố, vừa là số thuận nghịch sẽ nằm ở phần giao giữa số nguyên tố và số thuận nghịch). (không dùng mảng tạm)

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
#include <iostream> #include <cstring> using namespace std; bool isPrime(int n){ for(int i=2; i*i<=n; i++){ if(n%i==0) return false; } return n>1; } bool isPalind(int n){ string s = to_string(n); n = s.length(); for(int i=0; i<n/2; i++){ if(s[i] != s[n-i-1]) return false; } return true; } void sort(int a[], int n){ int s=0, b=0, p=0, r=n-1; /* * s: vi tri chen so la so nguyen to * b: vi tri chen so vua la so nguyent to, vua la so nghich dao * p: vi tri chen so nghich dao */ int i=0; while(i<=r){ if(isPrime(a[i]) && !isPalind(a[i])){ // Dich chuyen day a[s->i-1] ra sau 1 o int x = a[i]; for(int j=i; j>s; j--) a[j] = a[j-1]; a[s] = x; s++; b++; p++; }else if(isPrime(a[i]) && isPalind(a[i])){ int x = a[i]; for(int j=i; j>b; j--) a[j] = a[j-1]; a[b] = x; b++; p++; }else if(!isPrime(a[i]) && isPalind(a[i])){ int x = a[i]; for(int j=i; j>p; j--) a[j] = a[j-1]; a[p] = x; p++; }else{ swap(a[i], a[r--]); continue; } i++; } } void printArray(int a[], int n){ for(int i=0; i<n; i++) cout << a[i] << " "; } int main(){ int n; cin >> n; int a[n]; for(int i=0; i<n; i++) cin >> a[i]; sort(a, n); printArray(a, n); }

Câu 17

17. Cho 1 dãy số nguyên A có n số. a. Viết chương trình con tách dãy làm 2 phần: phần đầu chứa số lẻ, phần sau chứa số chẵn. b. Sắp xếp phần lẻ tăng, phẫn chẵn tăng.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; void randomArray(int *A, int n){ for(int i=0; i<n; i++){ A[i] = rand()%100; } } // Quick Sort void Partition(int *A, int low, int high){ int i=low, j=high; int pivot = A[(low+high)/2]; do{ while(A[i] < pivot) i++; while(A[j] > pivot) j--; if(i <= j){ int tmp = A[i]; A[i] = A[j]; A[j] = tmp; i++; j--; } }while(i <= j); if(low < j) Partition(A, low, j); if(i <high) Partition(A, i, high); } void cutArray(int *a, int n){ int l=0, r=n-1; for(int i=0; i<n; i++){ if(a[i]%2==0){ swap(a[i], a[l++]); }else{ swap(a[i--], a[r--]); } if(r<l) break; } // sap xep Partition(a, 0, l-1); Partition(a, l, n-1); } void printArray(int *A, int n){ for(int i=0; i<n; i++){ cout << A[i] << " "; } cout << endl; } int main(){ srand(time(0)); int n; cin >> n; int *A = new int[n]; randomArray(A, n); cutArray(A,n); printArray(A,n); delete[] A; }