PDA

View Full Version : em có cái bài tập về mảng hơi khó các anh giúp em nha!



nguyendongbb
10-05-2008, 01:56
cho dãy a(a1, a2,a3,....,an) và b(b1,b2,b3......,n)viết chương trình thực hiện các công việc sau :
nhập vào hai dãy trên sau đó gộp hai dãy theo thứ tự xen kẽ nhau.
thực hiện các công việc xóa các phần tử giống nhau trên hai dãy vừa gộp và in ra man hinh.
thank you very must !!

edogawaconan
10-05-2008, 08:21
"Thứ tự xen kẽ nha ?" Là bạn muốn (a1,b1,a2,b2,...,an,bn) hay xen kẽ theo kiểu giá trị : a1<a2<b1<a3<b2 .....

nguyendongbb
10-05-2008, 10:47
Thứ tự xen kẽ theo kiểu (a1,b1,a2,b2,...,an,bn)!!

nhocxinhzZ
11-05-2008, 08:09
cho dãy a(a1, a2,a3,....,an) và b(b1,b2,b3......,n)viết chương trình thực hiện các công việc sau :
nhập vào hai dãy trên sau đó gộp hai dãy theo thứ tự xen kẽ nhau.
thực hiện các công việc xóa các phần tử giống nhau trên hai dãy vừa gộp và in ra man hinh.
thank you very must !!
+Đầu tiên là gộp :
_ Bạn cấp phát 1 mảng mới có số phần tử bằng 2 mảng trên cộng lại
_ Rồi bạn gán : for ( int i = 0 , j = 0 ; j < n ; i += 2 , ++ j ) {
c[ i ] = a [ j ] ;
c[ i + 1 ] = b[ j ] ;
}
_ Đúng ý bạn chứ !!!
+Tới xoá :
_ Theo mình bạn nên viết 2 hàm ( 1 hàm xoá phần tử tại vị trí k bất kỳ và 1 hàm xoá phần tử giống nhau )
_ Hàm xoá phần tử tại vị trí k ( bạn dồn mảng lại tức là : a[n - 1] = a[n] và cứ lặp như thế cho đến vị trí cần xoá , nhớ giảm số phần từ mảng đi 1 )
_ Hàm xoá phần tử giống nhau ( xét từ cuối mảng đến đầu mảng , nếu thấy 2 phần tử nào giống nhau thì gọi hàm xoá phần tử tại vị trí k làm việc )
CHÚC BẠN MAY MẮN !!!

nguyendongbb
12-05-2008, 19:45
bạn ơi cho hỏi vòng lặp for của bạn có đúng không vậy sao mình làm y vậy mà vẩn sai á!!

calme1202
12-05-2008, 19:58
như trên có sửa chút nhé
khai báo mảng c[i] có số phần tử bằng 2 mảng kia cộng lại rồi làm như sau


int k=0;
for (int i=0, i<2n , i+=2)
{
int j=i+1;
c[i]=a[k];
c[j]=b[k];
k=0;
}
// xóa phần tử nhé: khai báo một biến đếm số phần tử được xóa trước int x
int x =0;
for (int i=0,i<=2n,i++)
{
for (int j=i+1,j<=2n,j++)
{
if (c[i]=c[j])
{
for (int k=j,k<2n,k++)
{
c[k]=c[k+1];
}
c[k+1]=0;

}
x++;
}

}
// in ra nhe
for (int i=0,i=2n -x ,i++)
{
cout << c[i];
}

nguyendongbb
12-05-2008, 20:03
cho mình hỏi cái vòng lặp for có ý nghĩa gì được không bạn !!!!
mình vẫn chưa hiểu lém về cái đó !!
cảm ơn !

calme1202
12-05-2008, 20:19
vòng for trong c khác với pascal nhé. trong pascal thì vòng for tự nâng biến chạy sau mỗi vòng

vòng for trong c có cấu trúc là for (giá trị đầu của biến , điều kiện biến , và biến thay đổi)
ví dụ for(int i =0, i<9, i++)
thì có nghĩa là i lúc đầu bằng 0
điều kiện để vòng for chưa thoát là i < 9
i++ sau mỗi vòng for thì i cộng thêm 1 vào chính nó

nguyendongbb
12-05-2008, 20:33
ban ơi !!mình làm thế này bạn xem thử sai chổ nào nhé !
#include<conio.h>
#include<iostream.h>
#include<string.h>
void main()
{
int a[50],b[50],i,j,n;
clrscr();
cout<<"nhap do dai mang thu nhat:";
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cout<<"nhap độ dài mảng thư hai :";
cin>>n;
for(j=0;j<n;j++)
cin>>b[j];
int c[100];
for(i=0;i<2*n;i+=2)
{
int j=i+1;
c[i]=a[i];
c[j]=b[i];
}
cout<<"mang sau khi gop la":<<c[i+j];
getch();
}

[=========> Bổ sung bài viết <=========]

cái phần mảng này minh chưa hiểu cho lắm có thể giải thích thêm cho mình thêm được không bạn !!

calme1202
12-05-2008, 21:57
bạn chạy code nè đi



#include<conio.h>
#include<iostream.h>
#include<string.h>
void main()
{
int a[50],b[50],i,j,k=0,n;
clrscr();
cout<<"nhap do dai mang thu nhat:";
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cout<<"nhap d? dài m?ng thu hai :";
cin>>n;
for(j=0;j<n;j++)
cin>>b[j];
int c[100];
for( i=0;i<2*n;i+=2)
{

int j=i+1;
c[i]=a[k];
c[j]=b[k];
k++;
}
cout<<"mang sau khi gop ";
for (i=0;i<2*n;i++)
cout<<c[i]<<" ";
getch();
}

nguyendongbb
20-05-2008, 21:41
sao vẩn chạy sai vậy bạn ?? kết quả không theo thứ tư là :a1,b1,a2,b2..,an,bn

calme1202
21-05-2008, 13:09
mình test chạy ổn rồi mà ! có điều 2 mảng a và b là phải có số phần tử bằng nhau !

[=========> Bổ sung bài viết <=========]

neu số phần tử khác nhau thì phải thêm trường hợp cho code !

nguyendongbb
23-05-2008, 09:09
nhưng nếu mình khai báo hai mảng có số phần tử khác nhau thì lại cho kết quả sai !! sữa cách nào vậy bạn ?

NgôiSaoMayMắn
23-05-2008, 19:17
1. Mảng A chiều dài n
2. Mảng B chiều dài m
3. Chiều dài mảng C kết quả k = m + n

int min = (n > m)?m:n;
int j = 0;
int k = 0;

for(;k < min; k++, j++)
{
C[j] = A[k];
j++;
C[j] = B[k];
}
// Mảng A dài hơn mảng B. Chép các phần tử còn lại của A vào C
for(;k < n; k++, j++)
C[j] = A[k];

// Mảng B dài hơn mảng A. Chép các phần tử còn lại của B vào C
for(;k < m; k++, j++)
C[j] = B[k];