第1关:校验数组是否满足集合定义
题目描述
本题要求输入数组的个数(不超过50)和数组元素(整数,以空格分隔),校验该数组是否满足集合定义:即没有重复元素。如果满足,输出1,不满足输出0
输入格式:
输入是两行,第一行输入数组元素的个数,第二行输入该数组的元素。
输出格式:
如果数组满足集合定义,则输出1,否则输出0。
输入样例:
在这里给出一组输入。例如:
5 1 2 3 11 6
输出样例:
在这里给出相应的输出。例如:
1
上答案:
#include <iostream>
using namespace std;
//校验集合a是否满足集合的定义,即没有重复元素
//有重复元素返回false,没有则返回true
const int N=50;
bool check(int a[], int n)
{
//**********************begin***********************
int i,j;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(a[i]==a[j+1]){
return false;
}
}
return true;
}
//**********************end**************************
}
int main()
{
int a[N];
int n=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
if(check(a,n))cout<<1<<endl;
else cout<<0<<endl;
}
第2关:求集合的并集
1.题目描述
编写程序求两个集合的并集,程序运行时,输入集合A的元素个数(不大于50)和元素(int型),再输入集合B的元素个数(不大于50)和元素(int型),计算并输出集合C的元素,集合C为A和B的并集。
2.输入格式:
输入一共有4行,第一行输入集合A的元素个数,第二行输入A的元素,第三行输入B的元素个数,第四行输入B的元素。
3.输出格式:
输出集合A与集合B的并集,从小到大排序后输出,将数组排序输出的代码可使用如下函数。(如果A或者B不是集合,则直接输出" a or b is not set",注意字母“a”之前有一个空格,字母“t”之后没有
输入样例: 例如:
3 1 2 3 5 2 3 4 5 6
输出样例: 例如:
1 2 3 4 5 6
上答案:
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 50;
const int M = 100;
//求a,b的并集c=a+b
void bin(int a[], int b[], int c[], int m, int n, int& k)
{
//**************************begin**********************************
k=0;
int d[1001];
memset(d,0,sizeof d);
for (int i=0;i<m;i++){
c[k++]=a[i];
d[a[i]]=1;
}
for (int i=0;i<n;i++){
if (d[b[i]]) continue;
else c[k++]=b[i];
}
//**************************end************************************
}
void prt(int a[], int n)
{
int i ,j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
for (i = 0; i < n - 1; i++) {
cout << a[i] << ' ';
}
cout << a[i] << endl;
}
//校验集合a是否满足集合的定义,即没有重复元素
//有重复元素返回false,没有则返回true
bool check(int a[], int n)
{
bool check1=0;
for (int i=0;i<n;i++){
for (int j=i+1;j<n;j++){
if(a[i]==a[j])check1=1;
}
}if(check1)return 0;
return 1;
//**************************end************************************
}
int main( )
{
int a[N];
int b[N];
int c[M];
int na, nb, m;
int i, j;
cin>>na;
for (i = 0; i < na; i++)
{
cin>>a[i];
}
cin>>nb;
for (j = 0; j < nb; j++)
{
cin >> b[j];
}
if(check(a,na)&&check(b,nb)){
bin(a, b, c, na, nb, m);
prt(c, m);
}
else
cout<<" a or b is not set"<<endl;
return 0;
}
第3关:求集合的交集
1.题目描述
编写程序求两个集合的交集,程序运行时,输入集合A的元素个数(不大于50)和元素(int型),再输入集合B的元素个数(不大于50)和元素(int型),计算并输出集合C的元素,集合C为A和B的交集。
2.输入格式:
输入一共有4行,第一行输入集合A的元素个数,第二行输入A的元素,第三行输入B的元素个数,第四行输入B的元素。
3.输出格式:
输出集合A与集合B的交集,从小到大排序后输出,将数组排序输出的代码可使用如下函数。(如果A或者B不是集合,则直接输出" a or b is not set",注意字母“a”之前有一个空格,字母“t”之后没有空格)
输入样例: 例如:
3 1 2 3 5 2 3 4 5 6
输出样例: 例如:
2 3
上答案:
#include <iostream>
using namespace std;
const int N = 50;
const int M = 100;
//求a,b的交集c=a交b
void jiao(int a[], int b[], int c[], int m, int n, int& k)
{
//***************************begin*****************************
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i]==b[j])
{
c[k++]=a[i];
}
}
}
//**************************end*********************************
}
void prt(int a[], int n)
{
int i ,j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
for (i = 0; i < n - 1; i++) {
cout << a[i] << ' ';
}
cout << a[i] << endl;
}
//校验集合a是否满足集合的定义,即没有重复元素
//有重复元素返回false,没有则返回true
bool check(int a[], int n)
{
//***************************begin*****************************
int i,j;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(a[i]==a[j+1]){
return false;
}
}
return true;
}
//**************************end*********************************
}
int main( )
{
int a[N];
int b[N];
int c[M];
int na, nb, m;
int i, j;
cin>>na;
m=0;
for (i = 0; i < na; i++)
{
cin>>a[i];
}
cin>>nb;
for (j = 0; j < nb; j++)
{
cin >> b[j];
}
if(check(a,na)&&check(b,nb)){
jiao(a, b, c, na, nb, m);
prt(c, m);
}
else
cout<<" a or b is not set"<<endl;
return 0;
}
第4关:求集合的差
1.题目描述
编写程序求两个集合的差集,程序运行时,输入集合A的元素个数(不大于50)和元素(int型),再输入集合B的元素个数(不大于50)和元素(int型),计算并输出集合C的元素,集合C为B-A。
2. 输入格式:
输入一共有4行,第一行输入集合A的元素个数,第二行输入A的元素,第三行输入B的元素个数,第四行输入B的元素。
3. 输出格式:
输出集合B与集合A的差集B-A,从小到大排序后输出,将数组排序输出的代码可使用如下函数。(如果A或者B不是集合,则直接输出" a or b is not set",注意字母“a”之前有一个空格,字母“t”之后没有空格)
输入样例:
在这里给出一组输入。例如:
3 1 2 3 5 2 3 4 5 6
输出样例:
在这里给出相应的输出。例如:
4 5 6
上答案:
#include <iostream>
using namespace std;
const int N = 50;
const int M = 100;
//求a,b的差集c=b-a
void cha(int a[], int b[], int c[], int m, int n, int& k)
{
//*******************************begin********************************
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[j]==b[i]){break;}
}
if(j==m)
{
c[k++]=b[i];
}
}
//*******************************end**********************************
}
void prt(int a[], int n)
{
int i ,j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
for (i = 0; i < n - 1; i++) {
cout << a[i] << ' ';
}
cout << a[i] << endl;
}
//校验集合a是否满足集合的定义,即没有重复元素
//有重复元素返回false,没有则返回true
bool check(int a[], int n)
{
//*******************************begin********************************
int i,j;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(a[i]==a[j+1]){
return false;
}
}
return true;
}
//*******************************end**********************************
}
int main( )
{
int a[N];
int b[N];
int c[M];
int na, nb, m;
int i, j;
m=0;
cin>>na;
for (i = 0; i < na; i++)
{
cin>>a[i];
}
cin>>nb;
for (j = 0; j < nb; j++)
{
cin >> b[j];
}
if(check(a,na)&&check(b,nb)){
cha(a, b, c, na, nb, m);
prt(c, m);
}
else
cout<<" a or b is not set"<<endl;
return 0;
}