编写函数 int com(int *a,int *b,int *c),实现将a和b两个已按升序排列...

发布网友 发布时间:2024-10-23 21:21

我来回答

2个回答

热心网友 时间:2024-10-27 04:06

#include<stdio.h>
#define N 10
#define M 10
int com(int *a, int *b, int *c)
{
int i = 0, j = 0, t = 0, res = 0;
while (i < N && j < M)
{
if (a[i] < b[j]) c[t++] = a[i++];
else if (a[i] > b[j]) c[t++] = b[j++];
else 
{
c[t++] = a[i++];
j++, res++;
}
}
while (i < N) c[t++] = a[i++];
while (j < M) c[t++] = b[j++];
return res;
}

int main()
{
int a[] = { 3, 6, 7, 18, 23, 33, 35, 43, 48, 78 };
int b[] = { 2, 7, 13, 21, 33, 37, 48, 50, 58, 67 };
int c[N + M];
int res = com(a, b, c);
for (int i = 0; i < N + M - res; i++)
printf("%d ", c[i]);
printf("\ncount=%d\n", res);
return 0;
}

热心网友 时间:2024-10-27 04:05

一、编写函数int com(int *a,int *b,int *c):
int com(int *a,int *b,int *c)
{
int i, j, k, count;
for(i=j=k=count=0;*(a+i) ||*(b+j) ;)
if(*(a+i) ==*(b+j))
{
count++;
i++;
j++;
}
else
{
if(*(a+i) ==0)*(c+k++)=*(b+j++);
else if(*(b+j) ==0)*(c+k++)=*(a+i++);
else *(c+k++)=*(a+i) <*(b+j)?*(a+i++):*(b+j++);
}
return count;
}
二、编写main函数:
#define N 100
main()
{
int a[N]={3, 6 ,7 ,18 ,23 ,33 ,35 ,43, 48 ,78};
int b[N]={2 ,7 ,13, 21, 33, 37 ,48, 50 ,58 ,67};
int c[N]={0};
int count,i;
count=com(a, b, c) ;
printf("合并后的数组是:\n");
for(i=0;*(c+i) ;i++)printf("%3d",*(c+i)) ;
printf("\ncount=%3d\n",count) ;
}
有什么问题请留言。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com