Nhập xuất mảng 1 chiều bằng đệ quy
File khaibao.h#include<iostream>
using namespace std;
void NhapMang(int a[],int n);
void XuatMang(int a[],int n);
void XuatNguoc(int a[],int n);
File caidat.cpp#include"khaibao.h"
void NhapMang(int a[],int n)
{
if(n>=0)
{
NhapMang(a,n-1);
cout<<"Nhap a["<<n<<"]:";
cin>>a[n];
}
}
void XuatMang(int a[],int n)
{
if(n>=0)
{
XuatMang(a,n-1);
cout<<a[n]<<" ";
{
}
void XuatNguoc(int a[],int n)
{
if(n>=0)
{
cout<<a[n]<<" ";
XuatNguoc(a,n-1);
}
}
File main.cpp#include"khaibao.h"
void main()
{
int a[100], n;
cout<<"Nhap n: ";
cin>>n;
NhapMang(a,n-1);
cout<<"Mang Xuat Xuoi La: ";
XuatMang(a,n-1);
cout<<"\nMang Xuat nguoc La: ";
XuatNguoc(a,n-1);
}
Khởi tạo mảng 1 chiều tăng dần và giảm dần
Mảng Tăng:
void nhap(int a[],int n)
{
srand((unsigned) time(NULL))
a[0]=abs(rand()%100);
for(int i=1;i<n;i++)
a[i]=a[i-1]+abs(rand()%100);
}
Mảng Giảm:
void nhap(int a[],int n)
{
srand((unsigned) time(NULL))
a[n-1]=abs(rand()%100);
for(int i=n-2;i>=0;i--)
a[i]=a[i+1]+abs(rand()%100);
}
1/ Viết hàm sắp xếp các phần tử lẻ tăng dần.
void saptang(int a[], int n)
{
int tam;
for( int i=0;i<n-1;i++)
if(a[i]%2==1)
for( int j=i+1;j<n;j++)
if (a[i]>a[j] && a[j]%2==1 )
{
tam=a[i];
a[i]=a[j];
a[j]=tam;
}
}
2/ Viết hàm sắp xếp các phàn tử chẳn giảm dần
void sapxepgiam(int a[], int n)
{
int tam;
for( int i=0;i<n-1;i++)
if(a[i]%2==0)
for( int j=i+1;j<n;j++)
if (a[i]<a[j] && a[j]%2==0 )
{
tam=a[i];
a[i]=a[j];
a[j]=tam;
}
}
3/ Viết hàm xoá các phần tử tại vị trí lẻ trong mảng.
void xoa(int a[], int &n)
{
for( int i=1;i<n;i++)
a[i]=a[i*2];
if(n%2==0)
n=n/2;
else n=n/2+1;
}
4/ Viết hàm xoá phần tử có giá trị lớn nhất trong mảng.
void xoa(int a[], int &n)
{
int max=a[0],i;
for(i=1;i<n;i++)
if(a[i]>max)
max=a[i];
for(i=0;i<n;i++)
if(a[i]==max)
{
for(int j=i;j<n;j++)
a[j]=a[j+1];
n--;
i--;
}
}
5/ Nhập vào giá trị X. Viết hàm xoá tất cả các phần tử có giá trị nhỏ hơn X.
void xoa(int a[], int &n,int x)
{ for(int i=0;i<n;i++)
if(a[i]<x)
{
for(int j=i;j<n;j++)
a[j]=a[j+1];
n--;
i--;
}
}
6/ Nhập vào giá trị X. Viết hàm xoá phần tử có giá trị gần X nhất.
void xoaganx(int a[],int &n,int x)
{
int kc=32768;
for(int i=0;i<n;i++)
{
if(a[i]<=x && x-a[i]<kc)
kc=x-a[i];
if(a[i]>=x && a[i]-x<kc)
kc=a[i]-x;
}
for(int i=0;i<n;i++) / / i<n-1 cũng được
if( a[i]-x==kc || x-a[i]==kc)
{
for(int j=i;j<n;j++)
a[j]=a[j+1];
i--;
n--;
}
}
7/ Viết hàm loại bỏ các phần tử có giá trị trùng nhau ( chỉ giữ lại một phần tử trong số các phần tử trùng).
void xoa(int a[], int &n)
{
for(int i=0;i<n-1;i++)
for( int k=i+1;k<n;k++)
if (a[k]==a[i])
{
for(int j=k;j<n-1;j++)
a[j]=a[j+1];
n--;
k--;
}
}
8/ Viết hàm chèn phần tử có giá trị X vào vị trí đầu tiên trong mảng.
void chen(int a[], int &n,int x)
{
for (int i=n;i>0;i--)
a[i]=a[i-1];
a[0]=x;
n++;
}
9/ Viết hàm chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn nhất trong mảng.
int max(int a[],int n)
{
int m=a[0];
for(int i=1;i<n;i++)
if(a[i]>=m)
m=a[i];
return m;
}
void chen(int a[],int &n,int x)
{
for(int i=0;i<n;i++)
{
if(a[i]==max(a,n))
{
for(int j=n;j>=i+2;j--)
a[j]=a[j-1];
a[i+1]=x;
n++;
i++;
}
}
}
10/ Viết hàm chèn phần tử có giá trị X vào phía trước phần tử có giá trị là số nguyên tố đầu tiên trong mảng.
bool ktnt(int k)
{
if(k<2) return false;
for(int i=2;i<=k/2;i++)
if(k%i==0)
return false;
return true;
}
int vt(int a[],int n)
{
for(int i=0;i<n;i++)
if(ktnt(a[i]))
return i;
}
void chen(int a[],int &n,int x)
{
int i=vt(a,n);
for(int j=n;j>=i+1;j--)
a[j]=a[j-1];
a[i]=x;
n++;
}
11/ Viết hàm nhập mảng sau cho không có phần tử nào trùng với nhau.
void nhapkhongtrung(int a[],int &n)
{
cout<<"nhap n: ";
cin>>n;
int i=0;
do
{ int flag=0;
cout<<"nhap vao phan tu thu"<<i<<": ";
cin>>a[i];
for(int j=i-1;j>=0;j--)
if(a[i]==a[j])
{
cout<<"ban nhap sai: \n";
flag=1;
break;
}
if(flag==1)continue;
else
i++;
}
while (i<n);
}