Tải bản đầy đủ (.pdf) (15 trang)

Chuyên đề mảng 1 chiều phần 1 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (239.11 KB, 15 trang )

Chuyên đề mảng 1 chiều
Y!m :nhatquai.theboy
Kĩ thuật nhập xuất mảng
128/ Viết hàm nhập mảng 1 chiều các số thực
void NhapMang(float a[], int &n)
{
printf("Nhap so phan tu: ");
scanf ("%d",&n);
for (int i=0;i<n;i++)
{
printf("Nhap a[%d]: ", i);
scanf("%f", &a[i]);
}
}

129/ Viết hàm nhập mảng 1 chiều các số nguyên
void NhapMang(int a[], int &n)
{
printf("Nhap so phan tu: ");
scanf ("%d",&n);
for (int i=0;i<n;i++)
{
printf("Nhap a[%d]: ", i);
scanf("%d", &a[i]);
}
}

130/ Viết hàm xuất mảng 1 chiều các số thực
void XuatMang(float a[], int n)
{
for (int i=0;i<n;i++)


{
printf(" %.2f ", a[i]);
}
}

131/ Viết hàm xuất mảng 1 chiều các số nguyên
void XuatMang(int a[], int n)
{
for (int i=0;i<n;i++)
{
printf("%4d", a[i]);
}
}

132/ Viết hàm liệt kê các giá trị chẵn trong mảng 1 chiều các số nguyên .
void LietKeGiaTriChan(int a[], int n)
{
for (int i=0;i<n;i++)
{
if(a[i]%2==0)
printf("%4d",a[i]);
}
}

133/ Viết hàm liệt kê các vị trí mà giá trị tại đó là giá trị âm trong mảng 1 chiều .
void LietKeViTriAm(int a[], int n)
{
for (int i=0;i<n;i++)
{
if(a[i]<0)

printf("%4d",i);
}
}


Kĩ thuật đặt lính canh các bt cơ bản

134/ Viết hàm tìm giá trị lớn nhất trong mảng 1 chiều các số thực
float lonnhat(float a[],int n)
{
float lc=a[0];
for (int i=0;i<n;i++)
{
if(a[i]>lc)
lc=a[i];
}
return lc;
}

135/ Tìm Giá trị dương đầu tiên trong mảng 1 chiều các số thực. Nếu mảng ko có giá trị dương thì
trả về giá trị -1
float duongdau(float a[], int n)
{
for (int i=0; i<n; i++)
{
if (a[i]>0)
{
return a[i];
}
}

return -1;
}

136/ Tìm Số chẵn cuối cùng trong mảng 1 chiều các số nguyên. Nếu mảng ko có giá trị chẵn thì trả
về giá trị -1 .
int chancuoi(int a[] , int n)
{
for(int i=n-1; i>=0; i )
{
if(a[i]%2==0)
{
return a[i];
}
}
return -1;
}

137/ Tìm 1 vị trí mà giá trị tại đó là giá trị nhỏ nhất trong mảng 1 chiều các số thực
float vitrinhonhat(float a[],int n)
{
int lc=0;
for(int i=0;i<n;i++)
{
if(a[i]<a[lc])

}

138/ Tìm Vị trí của giá trị chẵn đầu tiên trong mảng một chiều các số nguyên. Nếu mảng ko có giá
trị chẵn thì trả về giá trị -1 .
int vitrichandau(int a[] , int n)

{
for(int i=0; i<n; i++)
{
if(a[i]%2==0)
{
return i;
}
}
return -1;
}

139/ Tìm vị trí số hoàn thiện cuối cùng trong mảng 1 chiều các số nguyên. Nếu mảng ko có số hoàn
thiện thì trả về giá trị -1 .
int sohoanthien(int n)
{
int tong=0;
for (int i=1 ; i<n; i++)
if(n%i==0)
tong = tong + i;
if (tong == n)
return 1;
return 0;
}
int vitrihoanthiencuoi(int a[],int n)
{
for(int i=n-1; i>=0; i )
if(sohoanthien(a[i]==1)
return i;
return -1;
}



140/ Hãy tìm giá trị dương nhỏ nhất trong mảng các số thực. Nếu mảng không có giá trị dương thì
trả về giá trị là -1 .
float DuongNhoNhat(float a[], int n)
{
float min;
int dem= 0;
for (int i=0; i<n; i++)
{
if(a[i]>0)
{
dem ++;
break;
}
}
if (dem !=0)
{
min = a[i];
for (i=i+1; i<n; i++)
{
if((a[i]>0)&&(min>a[i]))
{
min = a[i];
}
}
return min;
}
return -1;
}



141/ Hãy tìm vị trí dương nhỏ nhất trong mảng 1 chiều các số thực. nếu mảng ko có giá trị dương
thì trả về 1 giá trị ngoài đoạn [0,n-1] là -1 nhằm mô tả ko có vị trí nào thỏa điều kiện.
int vtduongnhonhat(float *A, int n)
{
int min;
int dem =0 ;
for (int i=0; i<n; i++)
{
if(A[i]>0)
{
dem++;
min = i;
break;
}
}
if (dem == 0)
return -1;
for (i=i+1; i<n; i++)
{
if((A[i]>0)&&(A[min]>A[i]))
{
min = i;
}
}
return min;
}



Các bt luyện tập
142/ Tìm Giá trị nhỏ nhất trong mảng 1 chiều các số thực .
float NhoNhat(float a[], int n)
{
float min = a[0];
for (int i=1; i<n; i++)
{
min = (min>a[i])?a[i]:min;
}
return min;
}

143/ Viết hàm tìm chẵn đầu tiên trong mảng các số nguyên. Nếu mảng ko có giá trị chẵn thì hàm
trả về -1 .
int ChanDau(int a[],int n)
{
for(int i=0; i<n; i++)
{
if(a[i]%2==0)
{
return a[i];
}
}
return -1;
}


144/ Tìm số nguyên tố đầu tiên trong mảng 1 chiều các số nguyên. Nếu mảng không có số nguyên tố
thì trả về giá trị -1 .
int intto(int n)

{
if (n>=2)
{
for (int i=2; i<n; i++)
if (n%i==0)
return 0;
return 1;
}
return 0;
}
int nguyentodau(int a[], int n)
{
for(int i=0; i<n; i++)
{
if(intto(a[i])==1)
{
return a[i];
}
}
return -1;
}

145/ Tìm Số hoàn thiện đầu tiên trong 1 chiều các số nguyên. Nếu mảng ko có số hoàn thiện thì trả
về giá trị -1.
int sohoanthien(int n)
{
int tong=0;
for (int i=1 ; i<n; i++)
if(n%i==0)
tong = tong + i;

if (tong == n)
return 1;
return 0;
}
int hoanthiendau(int a[],int n)
{
for(int i=0; i<n; i++)
if(sohoanthien(a[i])==1)
return a[i];
return -1;
}


146/ Tìm giá trị âm đầu tiên trong mảng 1 chiều các số thực. nếu mảng ko có giá trị âm thì trả về
giá trị là 1 .
float AmDau(float a[], int n)
{
for (int i=0; i<n; i++)
{
if (a[i])<0)
{
return a[i];
}
}
return 1;
}

147/ Tìm số dương cuối cùng trong mảng số thực. Nếu mảng ko có giá trị dương thì trả về giá trị -1
.
float DuongCuoiCung(float a[], int n)

{
for (int i=n-1; i>=0; i )
{
if (a[i]>0)
{
return a[i];
}
}
return -1;
}

148/ Tìm số nguyên tố cuối cùng trong mảng 1 chiều các số nguyên. Nếu mảng ko có số nguyên tố
thì trả về giá trị -1 .
int nguyentocuoi(int a[],int n)
{
for(int i=n-1; i>=0; i )
{
if(intto(a[i])==1)
{
return a[i];
}
}
return -1;
}

149/ Tìm số hòan thiện cuối cùng trong mảng 1 chiều các số nguyên. Nếu mảng ko có số hòan thiện
thì hàm trả về giá trị -1 .
int hoanthiencuoi(int a[],int n)
{
for(int i=n-1; i>=0; i )

{
if(sohoanthien(a[i])==1)
{
return a[i];
}
}
return -1;
}

150/ Hãy tìm giá trị âm lớn nhất trong mảng các số thực. Nếu mảng ko có giá trị âm thì trả về giá trị 0 .
float AmMax(float a[], int n)
{
float max;
int dem =0;
for (int i=0; i<n; i++)
{
if(a[i]<0)
{
dem++;
break;
}
}
if (dem ==0)
{
return 0;
}
else
{
max = a[i];
for (i=i+1; i<n; i++)

{
if((a[i]<0)&&(max<a[i]))
{
max = a[i];
}
}
return max;
}
}

151/ hãy tìm số nguyên tố lớn nhất trong mảng 1 chiều. Nếu mảng ko có thì trả về giá trị 0
int nguyentolonnhat(int a[],int n)
{
int dem=0;
int max;
for(int i=0; i<n; i++)
{
if(intto(a[i])==1)
{
dem ++;
max = i;
break;
}
}
if (dem ==0)
{
return 0;
}
else
{

for (i=i+1; i<n; i++)
{
if ((intto(a[i])==1) && (a[max]<a[i]))
{
max = i;
}
}
}
return max;
}


152/ hãy tìm số hòan thiện nhỏ nhất trong mảng 1 chiều các số nguyên. Nếu mảng ko có trả về 0 .
int hoanthiennhonhat(int a[],int n)
{
int dem=0;
int min;
for(int i=0; i<n; i++)
{
if(sohoanthien(a[i])==1)
{
dem ++;
min = i;
break;
}
}
if (dem ==0)
{
return 0;
}

else
{
for (i=i+1; i<n; i++)
{
if ((sohoanthien(a[i])==1) && (A[min]>a[i]))
{
min = i;
}
}
}
return min;
}

153/ Hãy tìm giá trị chẵn nhỏ nhất trong mảng 1 chiều các số nguyên. Nếu ko có trả về -1 .
int channhonhat(int a[],int n)
{
int dem=0;
int min;
for(int i=0; i<n; i++)
{
if(a[i]%2==0)
{
dem ++;
min = i;
break;
}
}
if (dem ==0)
{
return -1;

}
else
{
for (i=i+1; i<n; i++)
{
if ((a[i]%2==0) && (a[min]>a[i]))
{
min = i;
}
}
}
return min;
}

154/ hãy tìm vị trí giá trị âm lớn nhất trong mảng số thực . ko có thì trả về -1 .
int VTriAmMax(float a[], int n)
{
int VTmax = -1;
for (int i=0; i<n; i++)
{
if(a[i]<0)
{
VTmax = i;
break;
}
}
for (i=i+1; i<n; i++)
{
if((a[i]<0)&&(a[VTmax]<a[i]))
{

VTmax = i;
}
}
return VTmax;
}



Bài tập luyện tư duy
155/ hãy tìm giá trị trong mảng các số thực xa giá trị x nhất .
void kcxanhat(float *A , int n , float x )
{
double kcxn = (fabs)(A[0] - x);
int j = 0;
for(int i = 0 ; i < n ; i++)
{
if((fabs)(A[i]-x) > kcxn)
{
kcxn = (fabs)(A[i] - x);
j = i;
}
}
printf("Gac gia tri xa %.2f nhat la :",x);
for(j ; j < n ; j++)
{
if((fabs)(A[j] - x) == kcxn)
{
printf("% .2f ",A[j]);
}
}

printf("\n");
}

156/ hãy tìm 1 vị trí trong mảng chiều các số thực mà giá trị tại vị trí đó là giá trị gần giá trị x nhất .
void vitrigannhat(float *A , int n , float x)
{
double kcgn = (fabs)(A[0] - x);
int j = 0;
for(int i = 0 ; i < n ; i++)
{
if((fabs)(A[i] - x) < kcgn)
{
kcgn = (fabs)(A[i] - x);
j = i ;
}
}
printf("Cac vi tri co gia tri gan % .2f nhat la :",x);
for(j;j<n;j++)
{
if((fabs)(A[j] - x) == kcgn)
{
printf("%d",j);
}
}
printf("\n");
}

157/ hãy tìm đoạn [a,b] sao cho đoạn này chứa tất cả các giá trị trong mảng .
void timdoan(st* A, int n)
{

st max = *A;
st min = *A;
for (int i=1; i<n; i++)
{
max = (max<*(A+i))?max:*(A+i);
min = (min>*(A+i))?min:*(A+i);
}
printf("\t[ %.1f , %.1f ] la doan chua cac gia tri trong mang\n", max, min);
}

158 hãy tìm giá trị x sao cho đoạn [-x,x] chứa tất cả các giá trị trong mảng .
float timx(float* A, int n)
{
float x = *A;
for (int i=1; i<n; i++)
{
x = (x>(fabs)(*(A+i)))? x : (fabs)(*(A+i));
}
return x;
}

159/ hãy tìm giá trị đầu tiên lớn hơn giá trị 2003. Nếu mảng ko có giá trị thỏa thì hàm trả về giá trị
là 0 .
float dautien(float *A , int n)
{
for(int i = 0 ; i < n;i++)
{
if(A[i] > 2003)
{
return A[i];

}
}
return 0;
}

160/ hãy tìm giá trị âm cuối cùng lớn hơn giá trị -1 trong mảng số thực. Nếu ko có thì hàm trả về 0 .
float cuoicung(float *A , int n)
{
for(n;n>=0;n )
{
if(A[n] > -1 && A[n] < 0)
{
return A[n];
}
}
return 0.0;
}

161/ hãy tìm giá trị đầu tiên nằm trong khỏang (x,y) cho trc. Nếu ko có trả về giá trị x .
[FONT="]int dautientrongdoan(int a[], int n, int x, int y)[/FONT]
[FONT="]{[/FONT]
[FONT="] int dem =0;[/FONT]
[FONT="] for(int i=0; i<n;i++)[/FONT]
[FONT="] {[/FONT]
[FONT="] if ((a[i]>=x)&&(a[i]<=y))[/FONT]
[FONT="] {[/FONT]
[FONT="] dem++;[/FONT]
[FONT="] break;[/FONT]
[FONT="] }[/FONT]
[FONT="] }[/FONT]

[FONT="] if (dem == 0)[/FONT]
[FONT="] {[/FONT]
[FONT="] return x;[/FONT]
[FONT="] }[/FONT]
[FONT="] return a[i];[/FONT]
[FONT="]}[/FONT]

162/ hãy tìm 1 vị trí trong mảng số nguyên thỏa 2 điều kiện: có giá trị lân cận và giá trị tại đó bằng
tích 2 giá trị lân cận. Nếu ko có trả về -1 .
int bai162(float a[], int n)
{
int i=1;
for (;i<n-1;i++)
{
if (a [i]==((a[i-1])*a[i+1]))
{
return i;
}
}
return -1;
}

163/ tìm số chính phương đầu tiên trong mảng 1 chiều số ngyên .
int sochinhphuong(int a)
{
for (int i=1; i<a; i++)
{
if (i*i == a)
{
return 1;

}
}
return 0;
}
int chinhphuongdautien(int *A, int n)
{
for (int i=0; i<n; i++)
{
if (sochinhphuong(*(A+i))==1)
{
return *(A+i);
}
}
return -1;
}

164/ Cho mảng số ng. Hãy tìm giá trị đầu tiên thỏa tính chất số gánh (ví dụ: 12321) .
int soganh(int n)
{
int t=n;
int dv,dn=0;
while (t!=0)
{
dv=t%10;
dn=dn*10+dv;
t=t/10;
}
if ( n = = dn)
{
return 1;

}
return 0;
}
int bai164(int a[], int n)
{
for (int i=0; i<n; i++)
{
if (soganh(a[i])==1)
{
return a[i];
}
}
return -1;
}

165/ Hãy tìm giá trị đầu tiên có chữ số đầu tiên là chữ số lẻ. Ko có trả về 0 (ví dụ: 110)
int chusodau(int n)
{
int dv;
while (n>=10)
{
dv=n%10;
n=n/10;
}
if (n%2==0)
return 0;
return 1;
}
int dauledautien(int a[], int n)
{

for(int i=0 ; i<n; i++)
{
if ( chusodau(a[i])==1)
{
return a[i];
}
}
return 0;
}

166/ hãy tìm giá trị đầu tiên trong mảng có dạng 2^k. ko có thì trả về 0 .
int dang2k(int n)
{
int du;
if (n==1)
{
return 1;
}
do
{
du = n % 2 ;
if (du != 0)
{
return 0;
}
n = n/2;
} while (n>=2);

return 1;
}

int bai166(int a[], int n)
{
for(int i=0 ; i<n; i++)
{
if (dang2k(a[i])==1)
{
return a[i];
}
}
return 0;
}

167/ Tìm giá trị toàn là chữ số lẻ và lớn nhất trong những số thỏa điều kiện. ko có trả về 0
int toanchusole(int n)
{
int dv;
while (n!=0)
{
dv = n % 10;
if (dv % 2 == 0)
{
return 0;
}
n=n/10;
}
return 1;
}
int bai167(int a[], int n)
{
int max;

int dem =0;
for(int i=0 ; i<n; i++)
{
if (toanchusole(a[i])==1)
{
max = a[i];
dem ++;
break;
}
}
if (dem == 0)
{
return 0;
}
for(; i<n; i++)
{
if (toanchusole(a[i])==1)
{
max = ( max>a[i]) ? max : a[i] ;
}
return max;
}

168/ Hãy tìm giá trị lớn nhất trỏng mảng có dạng 5^k. Nếu mảng không tồn tại thì trả về 0
int dang5k(int n)
{
int du;
if (n==1)
return 1;
while (n>=5)

{
du = n%5;
n=n/5;
if (du != 0)
return 0;
}
return 1;
}
int bai168(int a[], int n)
{
int max;
int dem =0;
for(int i=0 ; i<n; i++)
{
if (dang5k(a[i])==1)
{
max = a[i]; dem ++; break;
}
}
if (dem == 0)
{
return 0;
}
for(;i<n; i++)
{
if (dang5k(a[i])==1)
{
max = (max>a[i])?max:a[i] ;
}
}

return max;
}

169/ Hãy tìm số chẵn lớn nhất nhỏ hơn mọi giá trị lẻ có trong mảng nguyên
int lenhonhat(int a[], int n)
{
int min ;
int dem= 0;
for (int i=0; i<n ; i++)
{
if (a[i]%2 !=0)
{
min = a[i];
dem ++;
break;
}
}
if (dem ==0)
return 0;
for (i ; i<n; i++)
if (a[i]%2!=0 && min>a[i])
min = a[i];
return min;

}
int bai169(int a[], int n)
{
int lemin = lenhonhat(a,n);
if (lemin == 0)
return -1;

return lemin - 1;
}

170/ Tìm số nguyên tố nhỏ nhất lớn hơn mọi giá trị trong mảng nguyên .
int lonnhat(int a[], int n)
{
int max = a[0];
for(int i=1; i<n; i++)
{
max=(max>a[i]) ? max :a[i];
}
return max;
}
int intto(int a)
{
for (int i=2; i<a; i++)
{
if (a%i==0)
return 0;
}
return 1;
}
int bai170(int a[], int n)
{
int max = lonnhat(A, n);
for (int i = max + 1; i>max; i++)
{
if (intto(i) == 1)
break;
}

return i;
}

171 Hãy tìm ước chung lớn nhất của tất cả ptử trong mảng nguyên .
int sonhonhat(int a[], int n)
{
int min = a[0];
for (int i=1; i<n; i++)
min = (min < a[i])? min: a[i];
return min;
}
void uocsocuamin(int a[], int n, int b[], int &m , int min)
{
m = 0;
for (int i=1; i<=min; i++)
{
if (min % i == 0)
{
b[m]=i;
m++;
}
}
}
int uocsocuamang(int a[], int b[], int n, int m)
{
for (int i=0; i<n ; i++)
{
if(a[i]%b[m-1] !=0)
{
m ;

i=-1;
}
if (m <0)
return 1;
}
return b[m-1];
}

172/ Hãy tìm bội số chung nhỏ nhất trong mảng nguyên .
int solonnhat(int A[], int n)
{
int max=A[0];
for (int i=1; i<n; i++)
{
if ((max == 0)||(A[i]==0))
{
printf("Ban da vi pham loi the doi voi bai nay\n");
exit (0);
}
max=max>A[i]?max:A[i];
}
return max;
}
int boichungcuamang(int A[], int n, int max)
{
int boiso = max ;
for (int i=0; i<n; i++)
{
if (boiso % A[i] != 0)
{

boiso = boiso + max;
i=-1;
}
}
return boiso;
}

173 * Hãy viết hàm tìm chữ số xuất hiện ít nhất trong mảng .
int ChuSo(int a[], int n)
{
int i,So[10]={0},donvi,temp;

for (i=0;i<n;i++)
{
temp = abs(a[i]);
do
{
donvi = temp% 10;
temp = temp/10;
So[donvi]++;
} while (temp!=0);
}
int VTMax = 0;
for (i=0; i<10 ; i++)
{
VTMax = (So[VTMax]>So[i])?VTMax:i;
}
return VTMax;
}


174 * Hãy viết hàm liệt kê các cẵp giá trị (a,b) trong mảng thỏa đk a<=b .
void LietKe(int a[], int n)
{
int i,j;
for (i=0;i<n;i++)
{
for (j=i+1;j<n;j++)
{
if (a[i]<a[j] || a[i]==a[j])
{
printf("\nCap <%d,%d> vi tri <a[%d],a[%d]>",a[i],a[j],i,j);
}
}
}
}

175 * Hãy viết hàm tìm 2 giá trị gần nhau nhất trong mảng.
void LietKe(int a[], int n)
{
int i,j,kcgn = (abs)(a[0] - a[1]);
for (i=0;i<n;i++)
{
for (j=i+1;j<n;j++)
{
if ((abs)(a[i]-a[j])<kcgn)
{
kcgn = (abs)(a[i]-a[j]);
}
}
}

printf("Nhung cap gia tri gan nhau nhat: \n");
for (i=0;i<n;i++)
{
for (j=i+1;j<n;j++)
{
if ((abs)(a[i]-a[j])==kcgn)
{
printf("\t<%d,%d> vi tri <a[%d],a[%d]>\n",a[i],a[j],i,j);
}
}
}
}

×