有两个整数序列,每个整数序列中的所有元素均不相同,设计一个算法求它们的公共元素。
求解思路:利用set< int >容器存储数组,记住集合里的元素都是默认递增排序的,然后利用迭代器让两个集合从首元素依次比较,如果相等就把该元素存到定义的第三个set容器s3中,如果it1小于it2,it1++(元素都是递增排序的),如果it1大于it2,it2++就可以了。#include<stdio.h>#include< set >using nam...
求解思路:利用set< int >容器存储数组,记住集合里的元素都是默认递增排序的,然后利用迭代器让两个集合从首元素依次比较,如果相等就把该元素存到定义的第三个set容器s3中,如果it1小于it2,it1++(元素都是递增排序的),如果it1大于it2,it2++就可以了。
#include<stdio.h>
#include< set >
using namespace std;
void solve(set< int > s1,set< int > s2,set< int > &s3)
{
set< int >::iterator it1,it2;
it1=s1.begin();
it2=s2.begin();
while(it1!=s1.end()&&it2!=s2.end())
{
if(*it1==*it2)
{
s3.insert(*it1);
++it1;++it2;
}
else if(*it1<*it2)
++it1;
else
++it2;
}
}
void disset(set< int > s)
{
set< int >::iterator it;
for(it=s.begin();it!=s.end();++it)
printf("%d",*it);
print("\n");
}
int main()
{
int a[]={4,5,8,9,3};
int n=sizeof(a)/sizeof(a[0]);
set< int > s1(a,a+n);
int b={2,5,9,3,0};
int n=sizeof(b)/sizeof(b[0]);
set< int > s2(b,b+n);
set< int > s3;
solve(s1,s2,s3);
printf(“求解结果\n”);
printf("s1: ");dispset(s1);
printf("s2: ");dispset(s2);
printf("s3: ");dispset(s3);
}
更多推荐
所有评论(0)