解题思路:
先对输入的数组排序,再求解
注意事项:
参考代码:
#include<stdio.h>
#define MAX 1000
void sort(int *s,int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(s[j]>s[j+1])
{
int temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
}
int main()
{
int n,m;
int i,j,k;
int a[MAX],b[MAX],c[MAX];
int d[MAX];
int t=0;
int flag;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&b[i]);
}
//sort
sort(a,n);
sort(b,m);
//交集
i=0;
j=0;
for(k=0;(i<n)&&(j<m);)
{
if(a[i] == b[j])
{
c[k]=a[i];
k++;
i++;
j++;
}else if(a[i] > b[j]){
j++;
}else{
d[t]=a[i];
i++;
t++;
}
}
if(i<n)
{
for(;i<n;)
{
d[t]=a[i];
i++;
t++;
}
}
//交集
for(i=0;i<k;i++)
{
if(i== 0)
{
printf("%d",c[i]);
}else{
printf(" %d",c[i]);
}
}
printf("\n");
i=0;
j=0;
flag=0;
for(;(i<n)&&(j<m);)
{
if(a[i] == b[j])
{
if(flag == 1)
{
printf(" %d",a[i]);
}else{
printf("%d",a[i]);
flag = 1;
}
i++;
j++;
}else if(a[i] > b[j]){
if(flag == 1)
{
printf(" %d",b[j]);
}else{
printf("%d",b[j]);
flag = 1;
}
j++;
}else{
if(flag == 1)
{
printf(" %d",a[i]);
}else{
printf("%d",a[i]);
flag = 1;
}
i++;
}
}
if(i<n)
{
for(;i<n;)
{
printf(" %d",a[i]);
i++;
}
}else if(j<m){
for(;j<m;)
{
printf(" %d",b[j]);
j++;
}
}
printf("\n");
//B在A中的余集
for(i=0;i<t;i++)
{
if(i==0)
{
printf("%d",d[i]);
}else{
printf(" %d",d[i]);
}
}
printf("\n");
return 0;
}
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1914 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:488 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:761 |
【绝对值排序】 (C++代码)浏览:720 |
回文串 (C语言代码)浏览:3095 |
WU-字符串比较 (C++代码)浏览:824 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:956 |
Cylinder (C语言描述,蓝桥杯)浏览:1279 |
数组与指针的问题浏览:760 |
1035 题解浏览:875 |