求交集

来源

元培-From WHF

描述

给定两个整数集合,输出交集,输出时,按元素从小到大的顺序输出,以逗号间隔。
注意:给定的集合中可能有重复元素,但输出的交集中不能有重复元素。如果没有交集,则输出 NULL
例:
集合A:1,3,5,6,10,6,8,11
集合B: 2,4,8,6,10,6,12,13
那么,输出为:
6,8,10

关于输入

2行,每行表示一个集合的元素序列,元素之间以逗号间隔,假定每个集合不超出200个元素。

关于输出

两个集合的交集,按元素从小到大输出,以逗号间隔。如果没有交集,则输出 NULL

例子输入

1,3,5,6,10,6,8,11
2,4,8,6,10,6,12,13

例子输出

6,8,10

提示

集合中元素的个数请自己想办法确定

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>
using namespace std;
int is_num(char a) {
	if (a >= '0' && a <= '9')return 1;
	else if (a == '\n')return 2;
	else  if (a==',')return 0;
}//判断是字符还是数字还是逗号的一个程序(大家应该都看得出来的吧
int main(){
	int i = 0;
	int a[200] = { 0 };
	int b[200] = { 0 };
	//存储读入的两个数组
	int fin[300] = { 0 };
	//存储作为结果的数组(用数组的值作为标记
	int count1 = 0;
	int count2 = 0;
	int x = 0;
	int flag = 0;
	for (i = 0;; i++) {
		char ch;
		ch = getchar();//按顺序一次读入字符
		if (is_num(ch) == 2) {//读到换行符
			if (flag == 0) {
				flag = 1;//换到第二个数组读取
				a[count1] = x;//把最后一个数字存在第一个数组里
				x = 0;//重置
			}
			else { 
				b[count2] = x;//把最后一个数字存在第二个数组里
				break; //直接结束读取
			}
		}
		if (is_num(ch) == 1) {
			x = x * 10 + ch - '0';//向前进位,然后加上新读入的数字
		}
		else if (is_num(ch) == 0) {//读到了逗号
			if (flag == 0) {
				a[count1] = x;//把已经读入的数字存起来
				x = 0;
				count1++;//继续下一个序号
			}
			else if (flag == 1) {
				b[count2] = x;
				x = 0;
				count2++;
			}
		}
	}
	for (i = 0; i <= count1; i++) {
		if(fin[a[i]]==0)
			fin[a[i]] = 1;//把在第一个数组里出现过的数字标记一下
	}
	for (i = 0; i <= count2; i++) {
		if (fin[b[i]] == 1)fin[b[i]] = 100;//把同时出现过的数字标记一下
		else continue;
	}

int flag2 = 0;//关于是否输出逗号的格式问题
int flag3=0;
	for (i = 0; i < 300; i++) {
		if (fin[i] == 100) {
			if (flag2 == 0) {
				flag2 = 1;
				printf("%d", i);
flag3=1;
			}
			else printf(",%d", i);
flag3=1;
		}
	}
if(flag3==0)printf("NULL\n");//最后一个符合题意的数都没有,就打印NULL(一定要好好读题啊啊啊啊之前就是因为没有注意到这个情况.最后迫不得已打表了(悲
	return 0;
}

虽然打表不好.但是我还是想说编程网格打表就是永远的神(什么啊孩子学坏了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值