Trộn hai dãy số có thứ tự tăng hoặc giảm
March 07, 2023
Viết chương trình nhập vào hai dãy số có thứ tự, sao đó trộn hai dãy số có thứ tự thành một dãy số có thứ tự. Yêu cầu không được trộn chung rồi mới sắp thứ tự. Khi trộn phải tận dụng được tính chất đã sắp của hai dãy con.
Bài Giải
/*
Name: Tron 2 day so thu tu thanh tang - giam
Copyright: None
Author: Tran Anh
Description: https://gimi.vn
*/
#include<conio.h>
#include<stdio.h>
void inp(int t[], int k)
{
for(int i=0;i<k;i++)
{
printf("\t-Nhap phan tu [%d]: ",i);
scanf("%d",&t[i]);
}
}
int testb(int t[], int k)
{
int test=1;
for (int i=0;i<k-1;i++)
if(t[i]>t[i+1]) test=0;
return test;
}
int testm(int t[], int k)
{
int test=1;
for (int i=0;i<k-1;i++)
if(t[i]<t[i+1]) test=0;
return test;
}
void prt(int t[], int k)
{
int i;
printf("\n");
for(i=0;i<k;i++)
printf("%4d",t[i]);
}
main()
{
int n,m,i;
printf("\t-Nhap so phan tu day 1: "); scanf("%d",&n);
printf("\t-Nhap so phan tu day 2: "); scanf("%d",&m);
int a[50], b[50],c[100];
printf("\n\t-Nhap day so 1: \n");
inp(a,n);
printf("\n\t-Nhap day so 2: \n");
inp(b,m);
int ia=0,ib=0;
if((testb(a,n)&&(testb(b,m)))||((testm(a,n))&&(testm(b,m))))
{
if (testb(a,n)&&(testb(b,m)))
{
if(n<m)
for(i=n;i<m;i++) a[i]=999;
else
for(i=m;i<n;i++) b[i]=999;
for (i=0;i<m+n;i++)
{
if (a[ia]<b[ib])
{
c[i]=a[ia];
ia++;
}
else
{
c[i]=b[ib];
ib++;
}
}
}
if ((testm(a,n))&&(testm(b,m)))
{
if(n<m)
for(i=n;i<m;i++) a[i]=-999;
else
for(i=m;i<n;i++) b[i]=-999;
for (i=0;i<m+n;i++)
{
if (a[ia]>b[ib])
{
c[i]=a[ia];
ia++;
}
else
{
c[i]=b[ib];
ib++;
}
}
}
prt(a,n);
prt(b,m);
printf("\n\t=>Day so da gop: \n");
prt(c,m+n);
}
else
printf("\n\t=> Day so ban nhap chua theo thu tu tang hoac giam");
getch();
return 0;
}
Post a Comment