...整数集合a,b的元素个数和各个元素的值(不相同) ,计算并输出其并集...
发布网友
发布时间:2024-10-16 02:28
我来回答
共2个回答
热心网友
时间:2024-10-17 04:04
#include <stdio.h>
int sum(int a[],int m,int b[],int n,int c[])
{
int i,j,k=0,flag,*p,*q,*r;
r = c;
for(p=a,i=0;i<m;++i,p++)
{
flag = 1;
for(q=b,j=0;j<n;j++,q++)
{
if(*p==*q)
{
flag = 0;
break;
}
}
if(flag==1)
{
*r++=*p;
k++;
}
}
for(q=b,j=0;j<n;j++,q++)
{
*r++=*q;
k++;
}
return k;
}
int main()
{
int a[10]={0},b[10]={0},c[50],len,lena,lenb;
int i;
printf("请输入数组a的个数::");
scanf("%d",&lena);
printf("请输入a中%d个整数:",lena);
for(i=0;i<lena;i++)
scanf("%d",&a[i]);
printf("请输入数组b的个数::");
scanf("%d",&lenb);
printf("请输入b中%d个整数:",lenb);
for(i=0;i<lenb;i++)
scanf("%d",&b[i]);
len = sum(a,lena,b,lenb,c);
printf("并集为:\n");
for(i=0;i<len;++i)
printf("%d ",c[i]);
printf("\n");
return 0;
}
可以这样,不过没排序,要排序得这样:
#include <stdio.h>
void reorder(int a[], int len)
{
int i, j, index, max;
for (i = len - 1; i >= 0; i--)
{
index = 0;
max = 0;
for (j = 0; j <= i; j++)
{
if (a[j] > max)
{
max = a[j];
index = j;
}
}
a[index] = a[i];
a[i] = max;
}
}
int sum(int a[],int m,int b[],int n,int c[])
{
int i,j,k=0,flag,*p,*q,*r;
r = c;
for(p=a,i=0;i<m;++i,p++)
{
flag = 1;
for(q=b,j=0;j<n;j++,q++)
{
if(*p==*q)
{
flag = 0;
break;
}
}
if(flag==1)
{
*r++=*p;
k++;
}
}
for(q=b,j=0;j<n;j++,q++)
{
*r++=*q;
k++;
}
return k;
}
int main()
{
int a[10]={0},b[10]={0},c[50],len,lena,lenb;
int i;
printf("请输入数组a的个数::");
scanf("%d",&lena);
printf("请输入a中%d个整数:",lena);
for(i=0;i<lena;i++)
scanf("%d",&a[i]);
printf("请输入数组b的个数::");
scanf("%d",&lenb);
printf("请输入b中%d个整数:",lenb);
for(i=0;i<lenb;i++)
scanf("%d",&b[i]);
len = sum(a,lena,b,lenb,c);
reorder(c,len);
printf("并集为:\n");
for(i=0;i<len;++i)
printf("%d ",c[i]);
printf("\n");
return 0;
}
2013 6 2 12:50
这个……是C++啊,那就这样吧:
#include <iostream>
using namespace std;
void reorder(int a[], int len)
{
int i, j, index, max;
for (i = len - 1; i >= 0; i--)
{
index = 0;
max = 0;
for (j = 0; j <= i; j++)
{
if (a[j] > max)
{
max = a[j];
index = j;
}
}
a[index] = a[i];
a[i] = max;
}
}
int sum(int a[],int m,int b[],int n,int c[])
{
int i,j,k=0,*p,*q,*r;
r = c;
for(p=a,i=0;i<m;++i,p++)
{
for(q=b,j=0;j<n;j++,q++)
if(*p==*q)
break;
if(j==n)
{
*r++=*p;
k++;
}
}
for(q=b,j=0;j<n;j++,q++)
{
*r++=*q;
k++;
}
return k;
}
int main()
{
int a[10]={0},b[10]={0},c[50],len,lena,lenb;
int i;
printf("请输入数组a的个数::");
cin>>lena;
cout<<"请输入a中"<<lena<<"个整数:";
for(i=0;i<lena;i++)
cin>>a[i];
cout<<"请输入数组b的个数::";
cin>>lenb;
cout<<"请输入中"<<lenb<<"个整数:";
for(i=0;i<lenb;i++)
cin>>b[i];
len = sum(a,lena,b,lenb,c);
reorder(c,len);
cout<<"并集为:"<<endl;
for(i=0;i<len;++i)
cout<<c[i]<<" ";
cout<<endl;
return 0;
}
不知道你说的指针法要求是不是这么严,如果允许用指针引索的话可以用楼下的……
2013 6 2 13:08
突然想到,跑来修改一下……
热心网友
时间:2024-10-17 04:05
#include <iostream>
using namespace std;int main()
{
int *a=NULL;//集合a
int *b=NULL;//集合b
int na=0;//集合a大大小
int nb=0;//集合b大大小
printf("请输入集合a的大小:");
scanf("%d",&na);
a=new int[na];//创建集合a
printf("请输入集合a的%d个元素:",na);
int i;
for(i=0;i<na;i++)
scanf("%d",a+i);
printf("请输入集合b的大小:");
scanf("%d",&nb);
b=new int[nb];//创建集合b
printf("请输入集合b的%d个元素:",nb);
for(i=0;i<nb;i++)
scanf("%d",b+i);
printf("并集为:");
for(i=0;i<na;i++)//a中的所有元素都在并集中,直接输出
printf("%-4d",*(a+i));
int j;
for(i=0;i<nb;i++)//b中和a中任意一个元素都不相等则属于并集
{
for(j=0;j<na;j++)
{
if(*(b+i)==*(a+j))
break;
}
if(j==na)//j等于na说明和a中任意一个元素都不相等
printf("%-4d",*(b+i));
}
printf("\n");
delete a;//销毁动态创建的内存
delete b;//销毁动态创建的内存
return 0;
}