第1关:序列合并
//
// code.cpp
// step1
//
// Created by ljpc on 2018/7/17.
// Copyright © 2018年 ljpc. All rights reserved.
//
#include "code.h"
int* Merge_Array(int *arr1, int n1, int *arr2, int n2)
// 函数功能:合并两个数组arr1和arr2,完成升序排序,返回排序后的合并数组
// 参数介绍:arr1数组一的首地址,n1数组一的个数,arr2数组二的首地址,n2数组二的个数
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
sort(arr1, arr1 + n1);
sort(arr2, arr2 + n2);
static int arr3[10000];
merge(arr1, arr1 + n1, arr2, arr2 + n2, arr3);
return arr3;
/********** End **********/
}
第2关:序列包含
//
// code.cpp
// step2
//
// Created by ljpc on 2018/7/17.
// Copyright © 2018年 ljpc. All rights reserved.
//
#include "code.h"
bool Include_Array(int *arr1, int n1, int *arr2, int n2)
// 函数功能:输入两个升序数组,判断数组arr2是否被包含在数组arr1中(arr2不要求连续,但顺序不能乱)
// 参数介绍:arr1数组一的首地址,n1数组一的个数,arr2数组二的首地址,n2数组二的个数
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
bool judge = includes(arr1, arr1 + n1, arr2,arr2 + n2);
return judge;
/********** End **********/
}
第3关:集合并与交
//
// code.cpp
// step3
//
// Created by ljpc on 2018/7/17.
// Copyright © 2018年 ljpc. All rights reserved.
//
#include "code.h"
int Set_Union(int *arr1, int n1, int *arr2, int n2, int *arr3)
// 函数功能:给定两个数组arr1和arr2,计算他们的并集,然后存在数组arr3中,并返回并集大小
// 参数介绍:arr1数组一的首地址,n1数组一的个数,arr2数组二的首地址,n2数组二的个数,数组arr3
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
sort(arr1, arr1 + n1);
sort(arr2, arr2 + n2);
int n = set_union(arr1, arr1 + n1, arr2, arr2 + n2, arr3) - arr3;
return n;
/********** End **********/
}
int Set_Intersection(int *arr1, int n1, int *arr2, int n2, int *arr3)
// 函数功能:给定两个数组arr1和arr2,计算他们的交集,然后存在数组arr3中,并返回交集大小
// 参数介绍:arr1数组一的首地址,n1数组一的个数,arr2数组二的首地址,n2数组二的个数,数组arr3
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
sort(arr1, arr1 + n1);
sort(arr2, arr2 + n2);
int n = set_intersection(arr1, arr1 + n1, arr2, arr2 + n2,arr3) - arr3;
return n;
/********** End **********/
}
第4关:集合“差集”与“对称差集”
//
// code.cpp
// step4
//
// Created by ljpc on 2018/7/17.
// Copyright © 2018年 ljpc. All rights reserved.
//
#include "code.h"
int Set_Difference(int *arr1, int n1, int *arr2, int n2, int *arr3)
// 函数功能:给定两个数组arr1和arr2,计算arr1-arr2的差集,然后存在数组arr3中,并返回差集大小
// 参数介绍:arr1数组一的首地址,n1数组一的个数,arr2数组二的首地址,n2数组二的个数,数组arr3
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
sort (arr1, arr1 + n1);
sort (arr2, arr2 + n2);
int n = set_difference(arr1, arr1 + n1, arr2, arr2 + n2, arr3) - arr3;
return n;
/********** End **********/
}
int Set_Symmetric_Difference(int *arr1, int n1, int *arr2, int n2, int *arr3)
// 函数功能:给定两个数组arr1和arr2,计算(arr1-arr2)U(arr2-arr1),然后存在数组arr3中,最后数组大小
// 参数介绍:arr1数组一的首地址,n1数组一的个数,arr2数组二的首地址,n2数组二的个数,数组arr3
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
sort (arr1, arr1 + n1);
sort (arr2, arr2 + n2);
int n = set_symmetric_difference(arr1, arr1 + n1, arr2, arr2 + n2, arr3) - arr3;
return n;
/********** End **********/
}
第5关:序列排列问题
//
// code.cpp
// step5
//
// Created by ljpc on 2018/7/18.
// Copyright © 2018年 ljpc. All rights reserved.
//
#include "code.h"
void Next_Permutation(int *arr, int n, int m)
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int a=1;
do{
for(int i=0;i<n;i++){
if(i==n-1)cout<<arr[i];
else cout<<arr[i]<<" ";
}
cout<<endl;
a++;
if(a==m+1)break;
}while(next_permutation(arr,arr+n));
/********** End **********/
}
void Prev_Permutation(int *arr, int n, int m)
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int a=1;
do{
for(int i=0;i<n;i++){
if(i==n-1)cout<<arr[i];
else cout<<arr[i]<<" ";
}
cout<<endl;
a++;
if(a==m+1)break;
}while(prev_permutation(arr,arr+n));
/********** End **********/
}