欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题。
2、随机产生两组整数,每组整数中元素互不相同,这两组数按值递增有序。设计程序,将这两组数合并成按值递减有序的一组数,要求合并的新的一组数中,相同的元素只有一个。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 40
void S(int a[],int n){
//随机产生
int i,j,b;
int flag=1;
srand(time(0));
for (i=0;i<n;i++){
b=rand()%90+10;
for (j=0;j<i;j++){
if (b==a[j])
flag=0;
}
if (flag){
a[i]=b;
}
}
}
void Sort(int a[],int n){
//排序
int i,j,t;
for (i=0;i<n-1;i++){
for (j=0;j<n-i-1;j++){
if (a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
void Merge(int a[],int b[],int c[],int m,int n){
//合并
int i,j,k;
i=0;j=0;k=0;
while(i<m&&j<n){
if(a[i]<=b[j]){
c[k++]=a[i++];
}
else
c[k++]=b[j++];
}
while(i<m){
c[k++]=a[i++];
}
while(j<n){
c[k++]=b[j++];
}
}
void Rev(int a[],int n){
//就地逆置
int low,high;
low=0;
high=n-1;
int temp;
while(low<high){
temp=a[low];
a[low]=a[high];
a[high]=temp;
low++;
high--;
}
}
void Output(int a[],int n){
int i;
for(i=0;i<n;i++){
printf("%3d",a[i]);
}
printf("\n");
}
int main(){
int a[N],b[N],c[N];
int m,n;
printf("输入整数个数:\n");
scanf("%d",&m);
S(a,m);
Sort(a,m);
Output(a,m);
printf("输入另一个数组整数个数:\n");
scanf("%d",&n);
S(b,n);
Sort(b,n);
Output(b,n);
Merge(a,b,c,m,n);
Rev(c,m+n);
Output(c,m+n);
return 0;
}