} return flag; } 242 Ktra mảng có số chẵn ko? Có trả về 1, ko có trả về 0: int kiemtrachan



tải về 374.54 Kb.
Chuyển đổi dữ liệu10.08.2016
Kích374.54 Kb.
#16240
241 Ktra mảng có 2 giá trị 0 liên tiếp ko? Có trả về 1, ko có trả về 0:

int kiemtra0lientiep(int A[] , int n)

{

int flag = 0;

for(int i=0 ; i

{

if(A[i] == 0 && A[i+1] == 0)

{

flag = 1;

break;

}

}

return flag;

}
242 Ktra mảng có số chẵn ko? Có trả về 1, ko có trả về 0:

int kiemtrachan(int A[] , int n)

{

int flag = 0;

for(int i=0 ; i

{

if(A[i]%2 == 0)

{

flag = 1;

break;

}

}

return flag;

}
243 Ktra mảng có số ng tố ko? Có trả về 1, ko có trả về 0:

int SoNguyenTo(int a)

{

if (a<=1)

{

return 0;

}

for (int i=2; i

{

if (a%i==0)

{

return 0;

}

}

return 1;

}

int kiemtrasonguyento(int A[] , int n)

{

int flag = 0;

for(int i=0 ; i

{

if(songuyento(A[i]) == 1)

{

flag = 1;

}

}

return flag;

}

244. Ktra mảng có số hoan thien ko? Có trả về 1, ko có trả về 0:

int sohoanthien(int n)

{

int tong=0;

for (int i=1 ; i

if(n%i==0)

tong = tong + i;

if (tong == n)

return 1;

return 0;

}

int kttinhchat(int A[] , int n)

{

int flag = 0;

for(int i=0 ; i

{

if(sohoanthien(A[i])==1 && A[i] < 256)

{

flag = 1;

break;

}

}

return flag;

}
245 Ktra mảng có toàn số chẵn ko? Có trả về 1, ko có trả về 0:

int kttoanchan(int A[] , int n)

{

int flag = 1;

for(int i=0 ; i

{

if(A[i]%2!=0)

{

flag = 0; break;

}

}

return flag;

}
246 Ktra mảng có đối xứng ko? Có trả về 1, ko có trả về 0:

int ktdoixung(int A[] , int n)

{

int flag = 1;

for(int i=0 ; i

{

if(A[i] != A[n-i-1])

{

flag = 0;

break;

}

}

return flag;

}
247 Ta định nghĩa 1 mảng có tính chất lẻ, khi tổng của 2 ptử lien tiếp luôn là lẻ.Ktra mảng có tính chẵn hay lẻ?:

int kttoanle(int A[] , int n)

{

int flag = 1;

for(int i=0 ; i

{

if(((A[i]+A[i+1])%2)==0)

{

flag = 0;

break;

}

}

return flag;

}
248 Ktra mảng có tăng dần hay ko?:

int kttangdan(int A[] , int n)

{

int flag = 1;

for(int i=0 ; i

{

if(A[i] > A[i+1])

{

flag = 0;

break;

}

}

return flag;

}
249 Ktra mảng có giảm dần hay ko:

int ktgiam(int A[] , int n)

{

int flag = 1;

for(int i=0 ; i

{

if(A[i] < A[i+1])

{

flag = 0;

break;

}

}

return flag;

}
250 Hãy cho biết các ptử trong mảng có lập thành cấp số cộng ko? Nếu có chỉ ra công sai d:

int ktcapsocong(int A[] , int n , int &d)

{

d = A[1] - A[0];

int flag = 1;

for(int i=2 ; i

{

if((A[i+1] - A[i])!=d)

{

flag = 0; break;

}

}

return flag;

}

251 Hãy cho biết các ptử trong mảng có bằng nhau ko?:

int ktbangnhau(int A[] , int n)

{

int flag = 0;

for(int i = 0 ; i < n-1 ;i++)

{

for(int j = i + 1 ; j < n ;j++)

{

if(A[i] == A[j])

{

flag = 1;

break;

}

}

}

return flag;

}
252 Ta định nghĩa 1 mảng đc gọi là “dạng sóng”, khi ptử có trị số I lớn hơn hoặc nhỏ hơn 2 ptử xung quanh. Hãy viết hàm ktra mảng có sóng hay ko:

int ktdangsong(int A[] , int n)

{

int flag = 1;

for(int i = 1 ; i < n-1 ; i++)

{

if((A[i-1] > A[i] && A[i] > A[i+1]) || (A[i-1] < A[i] && A[i] < A

[i+1]))

{

flag = 0;

break;

}

}

return flag;

}
253 Hãy cho biết tất cả ptử trong mảng a có nằm trong mảng b ko:

int ktAnamtrongB(int A[] , int B[] , int n , int m)

{

int flag = 0;

int dem = 0;

for(int i = 0 ; i < n ; i++)

{

for(int j = 0 ; j < m ;j++)

{

if(A[i] == B[j])

{

dem++;

}

}

}

if(dem == n)

{

flag = 1;

}

return flag;

}
254 hãy đếm giá trị trong mảng thỏa: lớn hơn tất cả các giá trị đứng đằng trước nó:

int demptlndungsau(int A[] , int n)

{

int dem = 0;

for(int i = 1 ; i < n ; i++)

{

int flag = 1;

for(int j = 0; j < i ;j++)

{

if(A[i] < A[j] || A[i] == A[j])

{

flag = 0;

}

}

if(flag == 1)

{

dem++;

}

}

return dem;

}
255 Sắp xếp mảng tăng dần:

void sapxep(int a[],int n)

{

for (int i=0;i

{

for (int j=i+1;j

{

if (a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}
256 sắp xếp mảng giảm dần:

void sapxep(int a[],int n)

{

for (int i=0;i

{

for (int j=i+1;j

{

if (a[i]

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}
257 Sắp xếp lẻ tăng dần nhưng giá trị khácgiữ nguyên vị trí:

void sapxep(int a[],int n)

{

for (int i=0;i

{

if (a[i]%2!=0)

{

for (int j=i+1;j

{

if (a[j]%2!=0 && a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}

}
258 Sắp xếp số nguyên tố tăng dần nhưng giá trị khác giữ nguyên vị trí:

int SoNguyenTo(int a)

{

if (a<=1)

{

return 0;

}

for (int i=2; i

{

if (a%i==0)

{

return 0;

}

}

return 1;

}

void sapxep(int a[],int n)

{

for (int i=0;i

{

if (SoNguyenTo (a[i] ) ==1)

{

for (int j=i+1;j

{

if (SoNguyenTo (a[j] ) ==1 && a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}

}
259 Sắp xếp số hòan thiện giảm dần nhưng giá trị khác giữ nguyên vị trí:

int sohoanthien(int n)

{

int tong=0;

for (int i=1 ; i

if(n%i==0)

tong = tong + i;

if (tong == n)

return 1;

return 0;

}

void sapxep(int a[],int n)

{

for (int i=0;i

{

if (sohoanthien (a[i] ) ==1)

{

for (int j=i+1;j

{

if (sohoanthien (a[j] ) ==1 && a[i]

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}

}
260 Cho 2 mảng a,b. Hãy cho biết mảng b có phải là hoán vị của mảng a ko:

void sapxep(int a[],int n)

{

for (int i=0;i

{

for (int j=i+1;j

{

if (a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}

void KetQua(int a[],int b[],int na,int nb)

{

if (na != nb)

{

printf("ko phai!");

return ;

}

sapxep(a,na);

sapxep(b,nb);

for (int i=0;i

{

if (a[i]!=b[i])

{

printf("ko phai");

return;

}

}

printf("phai!");

return;

}
261 Sắp xếp số dương tăng dần, các số âm giữ nguyên vị trí:

void sapxep(int a[],int n)

{

for (int i=0;i

{

if (a[i]>0)

{

for (int j=i+1;j

{

if (a[j]>0 && a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}

}
262 Sắp xếp chẵn, lẻ tăng dần nhưng vị trí tương đối giữa các số ko thay đổi:

void sapxep(int a[],int n)

{

for (int i=0;i

{

for (int j=i+1;j

{

if (((a[i]%2==0 && a[j]%2==0)||(a[i]%2!=0 && a[j]%2!=0)) && a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}
263 Sắp xếp số dương tăng dần, âm giảm dần. Vị trí tương đối ko đổi:

void sapxep(int a[],int n)

{

for (int i=0;i

{

for (int j=i+1;j

{

if (a[i]>0 && a[j]>0 && a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

else if (a[i]<0 && a[j]<0 && a[i]

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}
264 Trộn 2 mảng đã tăng thành 1 mảng đc sắp xếp tăng:

void sapxep(int a[],int n)

{

for (int i=0;i

{

for (int j=i+1;j

{

if (a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}

void TronMang(int a[], int b[], int c[], int na, int nb, int &nc)

{

nc = na + nb;

sapxep(a,na); //Sap xep tang mang A

sapxep(b,nb); //Sap xep tang mang B

int vta=0,vtb=0;

for (int i=0;i

{

if (vta < na && vtb < nb)

{

if (a[vta] < b[vtb])

{

c[i] = a[vta];

vta++;

}

else

{

c[i] = b[vtb];

vtb++;

}

}

else if (vtb == nb)

{

c[i] = a[vta];

vta++;

}

else

{

c[i] = b[vtb];

vtb++;

}

}

}
265 Cho 2 mảng tăng. Hãy trộn thành 1 mảng giảm dần:

void sapxep(int a[],int n)

{

for (int i=0;i

{

for (int j=i+1;j

{

if (a[i]>a[j])

{

int temp=a[i];

a[i] = a[j];

a[j]=temp;

}

}

}

}

void TronMang(int a[], int b[], int c[], int na, int nb, int &nc)

{

nc = na + nb;

sapxep(a,na); //Sap xep tang mang A

sapxep(b,nb); //Sap xep tang mang B

int vta=na-1, vtb=nb-1;

for (int i=0;i

{

if (vta >= 0 && vtb >= 0)

{

if (a[vta] > b[vtb])

{

c[i] = a[vta];

vta--;

}

else

{

c[i] = b[vtb];

vtb--;

}

}

else if (vtb < 0)

{

c[i] = a[vta];

vta--;

}

else

{

c[i] = b[vtb];

vtb--;

}

}

}

266 Thêm 1 ptử x vào mảng tại vị trí k:

void themgiatri(int a[], int &n, int x, int k)

{

for (i=n; i>k; i--)

{

a[i] = a[i-1];

}

a[k] = x;

n++;

}
267 Hàm nhập mảng sao cho khi nhập xong thì giá trị trong mảng sắp xếp giảm dần:

void nhapmang(int a[], int &n)

{

printf("Nhap mang 1 chieu\n");

printf("Nhap n : "); scanf("%d",&n);

while (n<=1)

{

printf("Nhap lai n : " );

scanf("%d",&n);

}

int i,j,k;

for (i=0; i

{

printf("\tNhap a[%d] : ", i);

scanf("%d",&a[i]);

for (j=0; j

{

if (a[i]>a[j])

{

int temp = a[i];

for (k = i; k>j; k--)

{

a[k] = a[k-1];

}

a[j] = temp;

break;

}

}

}

}
269 Thêm x vào trong mảng tăng nhưng vẫn giữ nguyên tính tăng của mảng

Cách đi của hàm:

- duyệt từ đầu phần tử trở đi, gặp phần tử nào lớn hơn X

Vd: mảng : 1 2 3 4

X = 2

1 > X (sai) nên để nguyên 1 tại vị trí

2 > X (sai) nên để nguyên 2 tại vị trí

3 > X (đúng)

- làm công việc là lùi vị trí

vị trí : 0 1 2 3 4

mảng: 1 2 3 4

cho lùi từ vị trí 2 trở đi

vị trí : 0 1 2 3 4

mảng: 1 2 X 3 4

và cho chèn X vào vị trí tại 2, để X vào đúng vị trí a[i]

#include

void ChenXMangTang(int a[], int &n, int x)

{

for (int i=0; i

{

if (x>a[i])

{

int temp = x;

for (int k = n; k>i; k--)

{

a[k] = a[k-1];

}

a[i] = temp;

break;

}

}

n++;

}

void main()

{

int n=5;

int a[5] = {1,2,3,4,5};

int x = 2;

for(int i=0; i

printf(" %d " , a[i]);

printf("\n");

ChenXMangTang(a,n,x);

for(i=0; i

printf(" %d " , a[i]);

}
270 Nhập mảng sau khi nhập xong đã tự sắp xếp tăng dần:

void nhapmang(int a[], int &n)

{

printf("Nhap mang 1 chieu\n");

printf("Nhap n : "); scanf("%d",&n);

while (n<=1)

{

printf("Nhap lai n : " );

scanf("%d",&n);

}

int i,j,k;

for (i=0; i

{

printf("\tNhap a[%d] : ", i);

scanf("%d",&a[i]);

for (j=0; j

{

if (a[i]>a[j])

{

int temp = a[i];

for (k = i; k>j; k--)

{

a[k] = a[k-1];

}

a[j] = temp;

break;

}

}

}

}
271 Xóa các ptử có chỉ số k trong mảng:

void Xoavitri(int a[], int &n, int k)

{

for(int i=k; i

{

a[i] = a[i+1];

}

n--;

}
272 hãy xóa tất cả số lớn nhất trong mảng các số thực:

void xoavitri(float a[], int &n, int k)

{

for (int i=k; i

{

a[i] = a[i+1];

}

n--;

}

float lonnhat(float a[], int n)

{

float max = a[0];

for (int i=1; i

{

If(a[i]>max)

Max=a[i];

}

return max;

}

void xoamang(float a[], int &n)

{

float max = lonnhat(a,n);

for (int i=0; i

{

if (a[i]==max)

{

xoavitri(a,n,i);

i--;

}

}

}
273 Xóa tất cả số âm trong mảng:

void xoavitri(float a[], int &n, int k)

{

for (int i=k; i

{

a[i] = a[i+1];

}

n--;

}

void xoamang(float a[], int &n)

{

for (int i=0; i

{

if (a[i]<0)

{

xoavitri(a,n,i);

i--;

}

}

}

274 Xóa tất cả số chẵn trong mảng:

void xoavitri(float a[], int &n, int k)

{

for (int i=k; i

{

a[i] = a[i+1];

}

n--;

}

void xoamang(float a[], int &n)

{

for (int i=0; i

{

if (a[i]%2==0)

{

xoavitri(a,n,i);

i--;

}

}

}
275 Xóa tất cả “số chính phương” trong mảng:

void xoavitri(int a[], int &n, int k)

{

for (int i=k; i

{

a[i] = a[i+1];

}

n--;

}

int sochinhphuong(int n)

{

int a = (int)sqrt(n);

if (a*a == n)

{

return 1;

}

return 0;

}

void xoamang(int a[], int &n)

{

for (int i=0; i

{

if (sochinhphuong(a[i])==1)

{

xoavitri(a,n,i);

i--;

}

}

}
276 Xóa tất cả các ptử trùng với x:

void xoavitri(float a[], int &n, float k)

{

for (int i=k; i

{

a[i] = a[i+1];

}

n--;

}

void xoamang(float a[], int &n, float x)

{

for (int i=0; i

{

if (a[i] ==x)

{

xoavitri(a,n,i);

i--;

}

}

}
277 Xóa tất cả “số nguyên tố” trong mảng:

void xoavitri(int a[], int &n, int k)

{

for (int i=k; i

{

a[i] = a[i+1];

}

n--;

}

int songuyento(int n)

{

for (int i=2; i

{

if (n%i==0)

return 0;

}

return 1;

}

void xoamang(int a[], int &n)

{

for (int i=0; i

{

if (a[i]>=2)

{

if (songuyento(a[i])==1)

{

xoavitri(a,n,i);

i--;

}

}

}

}
278 xóa tất cả ptử trùng nhau trong mảng và chỉ giữ lại duy nhất 1 ptử:

void xoavitri(int a[], int &n, int k)

{

for (int i=k; i

{

a[i] = a[i+1];

}

n--;

}

void xoamang(int a[], int &n)

{

for (int i=0; i

{

for(int j=i+1; j

{

if (a[i]==a[j])

{

xoavitri(a,n,j);

j--;

}

}

}

}
279 Xóa tất cả ptử xuất hiên nhiều hơn 1 lần trong mảng:

void xoavitri(int a[], int &n, int k)

{

for (int i=k; i

{

a[i] = a[i+1];

}

n--;

}

void xoamang(int a[], int &n)

{

for (int i=0; i

{

for(int test = 0,j=i+1; j

{

if (a[i]==a[j])

{

xoavitri(a,n,j);

j--;

test=1;

}

}

if (test == 1)

{

xoavitri(a,n,i); //Xóa luôn chính nó

}

}

}
280 Hãy đưa số 1 về đầu mảng:

void DoiCho(int a[], int n, int k)

{

for(int i = k ; i>0; i--)

{

a[i] = a[i-1];

}

a[0] = 1;

}

void duaMotvedau(int a[], int n)

{

for (int i=0; i

{

if (a[i] == 1)

{

DoiCho(a,n,i); //vi tri i

}

}

}
281 Hãy đưa chẵn về đầu, lẻ về cuối, ptử 0 nằm giữa mảng:

void duachanvedau(int a[], int k)

{

int tam = a[k];

for(int i = k ; i>0; i--)

{

a[i] = a[i-1];

}

a[0] = tam;

}

void dua0(int a[], int k, int vitrichancuoi)

{

for(int i = k ; i>vitrichancuoi; i--)

{

a[i] = a[i-1];

}

a[vitrichancuoi] = 0;

}

void sapxep(int a[], int n)

{

int i;

int vitrichancuoi;

for (i=0; i

{

if (a[i] %2 == 0 && a[i]!=0)

{

duachanvedau(a,i); //vi tri i

}

}

for (i=0; i

{

if (a[i]%2!=0)

{

vitrichancuoi = i;

break;

}

}

for (i; i

{

if (a[i] == 0 )

{

dua0(a,i,vitrichancuoi); //vi tri i

}

}

}
282 Đưa các số chia hết cho 3 về đầu mảng:

void DoiCho(int a[], int n, int k)

{

int tam = a[k];

for(int i = k ; i>0; i--)

{

a[i] = a[i-1];

}

a[0] = tam;

}

void chiahetchoba(int a[], int n)

{

for (int i=0; i

{

if (a[i] %3 == 0)

{

DoiCho(a,n,i); //vi tri i

}

}

}
283 Đảo ngược mảng ban đầu:

void hoanvi(int &a, int &b)

{

int tam = a;

a = b;

b =tam;

}

void DaoMang(int a[], int n)

{

for (int i=0,j=n-1; i

{

hoanvi(a[i],a[j]);

}

}
284 Đảo ngược thứ tự các số chẵn trong mảng:

void hoanvi(int &a, int &b)

{

int tam = a;

a = b;

b =tam;

}

void daochan(int a[], int n)

{

for (int i=0; i

{

for (int j = i+1; j

{

if (a[j]%2==0 &&a[i] %2 == 0)

{

hoanvi(a[i],a[j]);

}

}

}

}
285 Đảo ngược thứ tự số dương trong mảng:

void hoanvi(int &a, int &b)

{

int tam = a;

a = b;

b =tam;

}

void daoduong(int a[], int n)

{

for (int i=0; i

{

for (int j = i+1; j

{

if (a[j]>0 && a[i]> 0)

{

hoanvi(a[i],a[j]);

}

}

}

}
286 Dịch trái xoay vòng các ptử trong mảng:

void dichtrai(int a[], int n)

{

int tam = a[0];

for (int i=0; i

{

a[i]=a[i+1];

}

a[n-1]= tam;

}
287 Dịch phải xoay vòng các ptử trong mảng:

void dichphai(int a[], int n)

{

int tam = a[n-1];

for (int i=n-1; i>0; i--)

{

a[i]=a[i-1];

}

a[0]= tam;

}
288 Hãy xuất ptử trong mảng theo yêu cầu: chẵn vàng, lẻ trắng:

void color (int a)

{

HANDLE mau;

mau = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(mau,a);

}

void XuatChanVangLeTrang(int a[], int n)

{

for (int i=0; i

{

if (a[i]%2==0)

{

color(14);

printf("%4d",a[i]);

}

else

{

color(7);

printf("%4d",a[i]);

}

}

}
289 Xuất mảng: chẵn nằm trên 1 hàng, lẻ nằm hàng tiếp theo:

void chanlehaihang(int a[], int n)

{

for (int i=0; i

{

if (a[i]%2==0)

{

printf("%4d",a[i]);

}

}

printf("\n\t");

for (i=0; i

{

if (a[i]%2!=0)

{

printf("%4d",a[i]);

}

}

}
290 Đảo ngược thứ tự số chẵn và lẻ trong mảng nhưng giữ vị trí tương đối:

void hoanvi(int &a, int &b)

{

int tam = a;

a = b;

b =tam;

}

void daonguocchanle(int a[], int n)

{

int i, j;

for (i=0; i

{

for(j=i+1; j

{

if (a[i]%2==0 && a[j]%2 == 0)

hoanvi(a[i],a[j]);

else if (a[i]%2!=0 && a[j]%2!=0)

hoanvi(a[i],a[j]);

}

}

}
291 Biến đổi mảng bằng cách thay giá trị max = giá trị min và ngc lại:

void minmax(int a[], int n, int &max, int &min)

{

max=a[0];

min=a[0];

for (int i=1; i

{

max=(max

min=(min>a[i])?a[i]:min;

}

}

void biendoi(int a[], int n, int max, int min)

{

for(int i=0; i

{

if (a[i]==max)

{

a[i]=min;

}

else if (a[i]==min)

{

a[i]=max;

}

}

}
292 Biến đổi mảng bằng cách thay tất cả ptử trong mảng bằng số nguyên gần nó nhất:

void thaysogannhat(float &n)

{

int phannguyen = (int) (n) ;

float phanle = n - phannguyen;

if (phanle <=0.5)

{

n = (float)phannguyen;

}

else

{

n = (float)phannguyen + 1;

}

}

void biendoi(float a[], int n)

{

for (int i=0; i

{

thaysogannhat(a[i]);

}

}
293 Liệt kê tất cả các mảng con:

void lietkecon(int a[], int n)

{

int ChieuDai;

for (int i=0; i

{

for (ChieuDai = 1; ChieuDai<=n; ChieuDai++)

{

for(int j=i; j

{

printf("%4d", a[j]);

}

printf("\n");

}

}

}
294 Liệt kê mảng con có độ dài lớn hơn 2 ptử:

void lietkecon(int a[], int n)

{

int ChieuDai;

for (int i=0; i

{

for (ChieuDai = 3+i; ChieuDai<=n; ChieuDai++)

{

for(int j=i; j

{

printf("%4d", a[j]);

}

printf("\n");

}

}

}
295 Liệt kê dãy con tăng dần:

int ktramangtang(int b[], int nb)

{

for(int i=0; i

{

if (b[i]>b[i+1])

return 0;

}

return 1;

}

void xuatmangcon(int b[], int nb)

{

for(int i=0; i

{

printf("%4d", b[i]);

}

printf("\n");

}

void lietkecontang(int a[], int n)

{

int ChieuDai;

int b[100], nb;

for (int i=0; i

{

for (ChieuDai = 1; ChieuDai<=n; ChieuDai++)

{

nb=0;

for(int j=i; j

{

b[nb]=a[j];

nb++;

}

if (ktramangtang(b,nb)==1)

{

xuatmangcon(b,nb);

}

}

}

}
296 Liệt kê dãy con tăng và chứa giá trị lớn nhất:

int lonnhat(int a[], int n)

{

int max = a[0];

for (int i=1; i

{

max = max

}

return max;

}

int ktramangtang(int b[], int nb)

{

for(int i=0; i

{

if (b[i]>b[i+1])

return 0;

}

return 1;

}

void xuatmangcon(int b[], int nb)

{

for(int i=0; i

{

printf("%4d", b[i]);

}

printf("\n");

}

int ktracomax(int b[], int nb,int max)

{

for (int i=0; i

{

if (b[i]==max)

{

return 1;

}

}

return 0;

}

void lietkecontang(int a[], int n, int max)

{

int ChieuDai;

int b[100], nb;

for (int i=0; i

{

for (ChieuDai = 1; ChieuDai<=n; ChieuDai++)

{

nb=0;

for(int j=i; j

{

b[nb]=a[j];

nb++;

}

if (ktramangtang(b,nb)==1)

{

if (ktracomax(b,nb,max)==1)

{

xuatmangcon(b,nb);

}

}

}

}

}
297 Tính tổng từng mảng con tăng:

int ktramangtang(int b[], int nb)

{

for(int i=0; i

{

if (b[i]>b[i+1])

return 0;

}

return 1;

}

void xuatmangcon(int b[], int nb)

{

for(int i=0; i

{

printf(" %d ", b[i]);

}

}

intt tongmangcon(int b[], int nb)

{

intt s=0;

for (int i=0; i

{

s = s + b[i];

}

return s;

}

void lietkecontang(int a[], int n)

{

int chieudaicon, b[100], nb, tong;

for (int i=0; i

{

for (chieudaicon = 1+i; chieudaicon<=n; chieudaicon++)

{

for(int j=i; j

{

b[nb]=a[j];

nb++;

}

if (ktramangtang(b,nb)==1)

{

xuatmangcon(b,nb);

tong = tongmangcon(b,nb);

printf("\tTong mang nay: %.2f\n", tong);

}

}

}

}
298 Đếm mảng con tăng có độ dài lớn hơn 1:

int ktramangtang(int b[], int nb)

{

for(int i=0; i

{

if (b[i]>b[i+1])

return 0;

}

return 1;

}

void Demcontang(int a[], int n)

{

int chieudaicon, b[100], nb;

int dem=0;

for (int i=0; i

{

for (chieudaicon = 2+i; chieudaicon<=n; chieudaicon++)

{

for(int j=i; j

{

b[nb]=a[j];

nb++;

}

if (ktramangtang(b,nb)==1)

{

dem++;

}

}

}

printf("\nTong so mang can tim: %d\n", dem);

}
299 Liệt kê dãy con toàn dương và độ dài lớn hơn 1:

int ktramangduong(float b[], int nb)

{

for(int i=0; i

if (b[i]<0)

return 0;

return 1;

}

void xuatmangcon(float b[], int nb)

{

for(int i=0; i

printf(" %.2f ", b[i]);

printf("\n");

}

void lietkecontang(float a[], int n)

{

int chieudaicon;

float b[100];

int nb;

for (int i=0; i

{

for (chieudaicon = 2+i; chieudaicon<=n; chieudaicon++)

{

for(int j=i; j

{

b[nb]=a[j];

nb++;

}

if (ktramangduong(b,nb)==1)

xuatmangcon(b,nb);

}

}

}
300 Đếm mảng con giảm:

int ktramanggiam(float b[], int nb)

{

for(int i=0; i

{

if (b[i]

return 0;

}

return 1;

}

void Demcongiam(float a[], int n)

{

int chieudaicon;

float b[100];

int nb;

int dem=0;

for (int i=0; i

{

for (chieudaicon = 1+i; chieudaicon<=n; chieudaicon++)

{

nb=0;

for(int j=i; j

{

b[nb]=a[j];

nb++;

}

if (ktramanggiam(b,nb)==1)

dem++;

}

}

printf("\nTong so mang con giam can tim: %d\n", dem);

}
301 Cho biết mảng a có phải là mảng con trong mảng b ko:

int Ktra(int a[], int b[], int na, int nb)

{

int i,j,test = 0;

for (i=0; i

{

if (b[i]==a[0])

{

int h = i;

for (test=1, j=0; j

{

if (a[j] != b[h])

{

test = 0;

break;

}

}

if (test == 1)

return test; //Mảng a là con mảng b

}

}

return test;

}
302 Đếm số lần xuất hiện mảng a trong mảng b:

int Dem(int a[], int b[], int na, int nb)

{

int i,j,test,dem=0;

for (i=0; i

{

if (b[i]==a[0])

{

int h = i;

for (test=1, j=0; j

{

if (a[j] != b[h])

{

test = 0;

break;

}

}

if (test == 1)

dem++;

}

}

return dem;

}
303 Dãy con toàn dương dài nhất:

void DayConToanDuongDaiNhat(int a[], int n)

{

int i,l,k,test,vt,pt=0;

for (i=0;i

{

for (l=i; l<=n;l++)

{

for (test = 1,k=0; k

{

if (a[k]<0)

{

test = 0; break;

}

}

if (test == 1)

{

if (pt

{

pt=k;

vt=i;

}

}

}

}

printf("\nDay con duong dai nhat: ");

for (vt; vt


printf("%4d",a[vt]);

}

304 * Cho mảng a, số nguyên M.Tìm 1 mảng con sao cho tổng các ptử bằng M
cách chạy:

Vd: 1 2 3 4 5

m = 3

Xét theo lấy 1 vị trí làm góc
for đầu là lấy vị trí 0

đây là toàn bộ mảng con của nó

1 --> tính tổng rồi so sánh với m

1 2 --> tính tổng rồi so sánh với m

1 2 3 --> cứ thế

1 2 3 4

1 2 3 4 5
for tiếp thì cho vị trí làm gốc tăng lên 1

2

2 3

2 3 4

2 3 4 5
cứ sau mỗi for thì vị trí làm gốc đc tăng lên 1

#include

void TongMangConBangM(int a[], int n,int m)

{

for (int vi_tri_goc = 0 ; vi_tri_goc < n ; vi_tri_goc++)

{

for (int chieu_dai_mang_con = vi_tri_goc + 1 ; chieu_dai_mang_con < n ; chieu_dai_mang_con++)

{

int tong = 0;

for (int vi_tri_ptu= vi_tri_goc; vi_tri_ptu < chieu_dai_mang_con ; vi_tri_ptu++)

{

tong +=a[vi_tri_ptu];

}

if (tong == m)

{

//xuat cai mang tim dc

printf("\nDay con co tong ptu bang M: ");

for (int k = vi_tri_goc; k < chieu_dai_mang_con ; k++)

printf("%4d",a[k]);

}

}

}

}
void main()

{

int n=4;

int a[4] = {1,2,3,1};

int m = 3;

TongMangConBangM(a,n,m);

}
305 * Tìm dãy con toàn dương có tổng lớn nhất:

đây là bài hoàn chỉnh có sử phần code của anh HUY

#include

#include

void Nhap(int a[],int &n)

{

printf("\nNhap so luong phan tu: ");

scanf("%d",&n);

printf("\nNhap mang: ");

for (int i=0;i

{

printf("\nNhap phan tu thu %d: ",i+1);

scanf("%d",&a[i]);

}
}

int soduongdautien(int a[],int n)

{

for(int i=0;i

if(a[i]>0)

return i;

return -1;

}

int dayduongdau(int a[],int n)

{

int k=soduongdautien(a,n);

int Sum=0;

if(k==-1)

return -1;

else

{

for(int i=k;i

{

if(a[i]>0)

Sum+=a[i];

else

{

break;

}

}

}

return Sum;

}

void DayConToanDuongTongLonNhat(int a[], int n)

{

int Stam=0,k;

int sum=dayduongdau(a,n);

if (sum==-1)

{

printf("\nDay toan am.");

return;

}

for (int i=0;i

{

Stam=0;

for (k=i; k

{

if (a[k]>0)

Stam+=a[k];

else

break;

}

if(sum

sum=Stam;

}

printf("\nDay con duong co tong lon nhat.\n");

for(int i=0;i

{

Stam=0;

for (k=i; k

{

if (a[k]>0)

Stam+=a[k];

else

break;

}

if(sum==Stam)

{

for(int j=i;j

printf("%4d",a[j]);

printf("\n");

}

}

}

void Xuat(int a[],int n)

{

for(int i=0;i

printf("%4d",a[i]);

}

void main()

{

int a[100],n;

Nhap(a,n);

printf("\nDay vua nhap la: \n");

Xuat(a,n);

printf("\n");

DayConToanDuongTongLonNhat(a,n);

getch();

}
ở đây nếu ta nhập mảng có 7 phần tử với các giá trị 1 2 -1 1 2 -1 3

thì sẽ xuất ra

1 2

1 2

3

đều là dãy con lớn nhất.

nếu nhập mảng mà không có giá trị dương thì xuất ra dòng chữ "Dãy toàn âm".

bạn nào có thấy chỗ nào thiếu chỉ mình mình sửa lại code cho hoàn thiện hơn.

cảm ơn các bạn.
306 Tìm mảng con có tổng lớn nhất:

void DayConTongLonNhat(int a[], int n)

{

int i,l,k,s=0,Stam=0,vt,pt;

for (i=0;i

{

for (l=i; l<=n;l++)

{

for (k=0; k

Stam+=a[k];

if (Stam>s)

{

s = Stam;

vt = i;

pt = k;

}

}

}

printf("\nDay con co tong lon nhat: ");

for (vt; vt


printf("%4d",a[vt]);

}
307 Tạo mảng b chỉ chứa giá trị lẻ từ mảng a:

void TaoMangB(int a[], int n)

{

int b[100], nb=0;

for (int i=0; i

{

if (a[i]%2!=0)

{

b[nb] = a[i];

nb++;

}

}

xuatmang(b,nb);

}
308 Tạo mảng b chỉ chứa giá trị âm từ mảng a:

void TaoMangB(int a[], int n)

{

int b[100], nb=0;

for (int i=0; i

{

if (a[i]<0)

{

b[nb] = a[i];

nb++;

}

}

xuatmang(b,nb);

}
309 Tạo mảng b sao cho b[i] = tổng các ptử lận cận với a[i] trong mảng a

Lưu ý: b[0] = a[1]; b[n-1] = a[n-2];

void TaoMangB(int a[], int n)

{

int b[100], nb=0;

for (int i=0; i

{

if (i==0)

b[nb] = a[i+1];

else if (i==n-1)

b[nb] = a[i-1];

else

b[nb] = a[i-1] + a[i+1];

nb++;

}

xuatmang(b,nb);

}
310 Tạo mảng b chỉ chứa số nguyên tố từ mảng a:

int SoNguyenTo(int a)

{

if (a<=1)

return 0;

for (int i=2; i

if (a%i==0)

return 0;

return 1;

}

void TaoMangB(int a[], int n)

{

int b[100], nb=0;

for (int i=0; i

{

if (SoNguyenTo(a[i])==1)

{

b[nb] = a[i];

nb++;

}

}

xuatmang(b,nb);

}

Bài tập Nâng cao
311 Tạo 1 mảng ngẫu nhiên và xuất ra dãy con tăng dần dài nhất. Nếu 2 dãy con tăng dài bằng nhau thì xuất dãy con tăng đầu tiên:

#include

#include

#include

void NhapMang(int a[], int &n)

{

n = rand()%10;

for (int i=0; i

a[i] = rand()%50;

}

void XuatMang(int a[], int n)

{

for (int i=0; i

printf("%4d",a[i]);

}

void TimDayConTangDan(int a[], int n, int &ViTriBatDau, int &ViTriKetThuc)

{

int ViTriBatDauTam =0, ViTriKetThucTam=0;

int Dem =0, DemTam = 0;

for (ViTriKetThucTam = 0; ViTriKetThucTam

{

if (a[ViTriKetThucTam] <= a[ViTriKetThucTam+1])

{

DemTam++;

}

else

{

if (DemTam>Dem)

{

ViTriBatDau = ViTriBatDauTam;

ViTriKetThuc = ViTriKetThucTam;

Dem = DemTam;

}

ViTriBatDauTam = ViTriKetThucTam + 1;

DemTam = 0;

}

}

}

void XuatDayCon(int a[], int ViTriBatDau, int ViTriKetThuc)

{

for(int i=ViTriBatDau; i<=ViTriKetThuc; i++)

printf("%4d",a[i]);

}

void main()

{

srand((unsigned)time(NULL));

int n,a[100];

NhapMang(a,n); //Nhập mảng ngẫu nhiên

printf("Mang ngau nhien duoc tao: ");

XuatMang(a,n);

printf("\n");

//Tìm dãy con tăng dài nhất

int ViTriBatDau = -1, ViTriKetThuc = -1;

TimDayConTangDan(a,n,ViTriBatDau,ViTriKetThuc);

//Xuất dãy con tăng với 2 biến ViTriBatDau, ViTriKetThuc

printf("Day con tang dai nhat: ");

XuatDayCon(a,ViTriBatDau,ViTriKetThuc);

}


tải về 374.54 Kb.

Chia sẻ với bạn bè của bạn:




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương