Trong bài giải Bài 3 của Thân có vẻ chưa khớp với đề bài nhỉ. Đề bài là n và n+1 phần tử.
– Câu a là nhập n và nhập n phần tử của mảng luôn => Nhưng trong bài giải là chỉ nhập n-1 phần tử của mảng.
chỉ số mảng từ 0 đến n-1. nếu i chạy đến n-1, thay i = n-1 vào thuật toán ở vòng lặp thứ hai: for (j = n – 1; j > i; j–) {.. thì thấy điều kiện lặp không thỏa mãn nữa. tức i chạy đến n-1 là thừa.
void insertX(int a[], int* n, int x) {
void insertX(int a[], int* n, int x) {
int indexToInsert(int a[], int n, int x);
int index = indexToInsert(a, *n, x);
// nếu nhỏ hơn tất cả các phần tử, chèn ở cuối mảng
if (index == -1) {
a[*n] = x;
}
// ngược lại dồn tất cả các phần tử từ vị trí index sang phải 1 đơn vị
else {
int i;
for (i = *n; i > index; i–) {
a[i] = a[i – 1];
}
// chèn x vào vị trí index
a[index] = x;
}
(*n)++;
}
int indexToInsert(int a[], int n, int x) {
// duyệt tìm phần tử đầu tiên nhỏ hơn x
int i;
for (i = 0; i < n; i++) {
if (a[i] index; i–) {
a[i] = a[i – 1];
}
// chèn x vào vị trí index
a[index] = x;
}
(*n)++;
}
int indexToInsert(int a[], int n, int x) {
// duyệt tìm phần tử đầu tiên nhỏ hơn x
int i;
for (i = 0; i < n; i++) {
if (a[i] int indexToInsert(int a[], int n, int x) insertX int index = indexToInsert(a, *n, x); thì n có ‘sao’ ạ
khi khai báo hàm int indexToInsert(int a[], int n, int x) thì n ko có “dấu sao” , mà lên hàm insertX ta lại khai báo int index = indexToInsert(a, *n, x); có “dấu sao” ạ.
11 Comments
Trong bài giải Bài 3 của Thân có vẻ chưa khớp với đề bài nhỉ. Đề bài là n và n+1 phần tử.
– Câu a là nhập n và nhập n phần tử của mảng luôn => Nhưng trong bài giải là chỉ nhập n-1 phần tử của mảng.
code bài đó đã được update!
anh oi cho em hỏi tại sao lại cho i chay tu 0 -> n – 2 ạ .(em nghĩ nó chạy từ 0->9 thì phải là đến n – 1 chứ a )
với đk j > i ở dưới với ạ
chỉ số mảng từ 0 đến n-1. nếu i chạy đến n-1, thay i = n-1 vào thuật toán ở vòng lặp thứ hai: for (j = n – 1; j > i; j–) {.. thì thấy điều kiện lặp không thỏa mãn nữa. tức i chạy đến n-1 là thừa.
cho em hỏi cái dk mà j > i với ạ
ad cho em hỏi:
void insertX(int a[], int* n, int x) {
void insertX(int a[], int* n, int x) {
int indexToInsert(int a[], int n, int x);
int index = indexToInsert(a, *n, x);
// nếu nhỏ hơn tất cả các phần tử, chèn ở cuối mảng
if (index == -1) {
a[*n] = x;
}
// ngược lại dồn tất cả các phần tử từ vị trí index sang phải 1 đơn vị
else {
int i;
for (i = *n; i > index; i–) {
a[i] = a[i – 1];
}
// chèn x vào vị trí index
a[index] = x;
}
(*n)++;
}
int indexToInsert(int a[], int n, int x) {
// duyệt tìm phần tử đầu tiên nhỏ hơn x
int i;
for (i = 0; i < n; i++) {
if (a[i] index; i–) {
a[i] = a[i – 1];
}
// chèn x vào vị trí index
a[index] = x;
}
(*n)++;
}
int indexToInsert(int a[], int n, int x) {
// duyệt tìm phần tử đầu tiên nhỏ hơn x
int i;
for (i = 0; i < n; i++) {
if (a[i] int indexToInsert(int a[], int n, int x) insertX int index = indexToInsert(a, *n, x); thì n có ‘sao’ ạ
bài tập 3 của bài 25 nha ad.
cau hỏi:
khi khai báo hàm int indexToInsert(int a[], int n, int x) thì n ko có “dấu sao” , mà lên hàm insertX ta lại khai báo int index = indexToInsert(a, *n, x); có “dấu sao” ạ.
Sau khi chèn thì số phần tử của mảng sẽ thay đổi do đó phải truyền con trỏ. Xem bài truyền con trỏ/tham chiếu phần hàm để biết thêm chi tiết nhé
void chen(int arr[], int* n, int x, int k)
{
int i;
(*n)++;
for ( i = *n – 1; i > k; i–)
{
arr[i] = arr[i – 1];
}
arr[k] = x;
}
anh ơi , anh cho em hỏi hàm này của em bị lỗi gì mà nó chạy đến (*n)++ bị lỗi ạ
E đã khởi tạo giá trị cho n trước khi truyền vào hàm đó chưa?