| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 926 人关注过本帖
标题:A - B的题目:
只看楼主 加入收藏
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
 问题点数:0 回复次数:2 
A - B的题目:

人见人爱A-B
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 487 Accepted Submission(s) : 140

Problem Description


参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)

呵呵,很简单吧?


Input


每组输入数据占1行,每行数据的开始是2个整数n(0<n<=100)和m(0<m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开.
如果n=0并且m=0表示输入的结束,不做处理。


Output


针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.

Sample Input


3 3 1 2 3 1 4 7
3 7 2 5 8 2 3 4 5 6 7 8
0 0

Sample Output


2 3
NULL

http://acm.hdu.edu.cn/showproblem.php?pid=2034

自己写的,试了几组测试数据都对了!但是还是错了!真不知道错在了那里?
#include <iostream>
using namespace std;

int readi(int * p, int x);
int is_match(int * p, int m, int * q, int n, int * pq);
int order(int * pq, int num);

int main()
{
int m, n, first[101], second[101], last[101], * p, * q, *pq, shuliang;

while((cin >> m >> n)&&(m != 0&&n != 0))
{
p = first;
q = second;
pq = last;
readi(p, m);
readi(q, n);
shuliang = is_match(p, m, q, n, pq);
if(shuliang == 0)
cout << "NULL" << endl;
else
{
order(pq, shuliang);
for(int i = 0;i < shuliang;i ++)
{
cout << pq[i] << ' ';
}
cout << endl;
}
}
return 0;
}

int readi(int * p, int x)
{
for(int i = 0;i < x;i ++)
{
scanf("%d", &p[i]);
}

return 0;
}

int is_match(int * p, int m, int * q, int n, int * pq)
{
int num = 0, word = 0;

for(int i = 0;i < m;i ++)
{
word = 0;
for(int j = 0;j < n;j ++)
{
if(p[i] != q[j])
{
word ++;
}
}
if(word == n)
{
pq[num] = p[i];
num ++;
}
}

return num;
}

int order(int * pq, int num)
{
int key;

for(int j = 1;j < num;j ++)
{
int i = j - 1;
key = pq[j];
while(i >= 0&&key < pq[i])
{
pq[i + 1] = pq[i];
i --;
}
pq[i + 1] = key;
}

return 0;
}

搜索更多相关主题的帖子: 题目 Submission Limit Java Other 
2006-12-21 14:08
yvtianzll
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-9-13
收藏
得分:0 
while((cin >> m >> n)&&(m != 0&&n != 0))
两个集合可以一个为空集,至少你这句话的逻辑是有问题的
2006-12-22 14:12
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
这道题的意思是当两个数m和n都为零时,表示结束!呵呵!我试了一下!果然是这里出现了错误!
while((cin >> m >> n)&&!(m == 0&&n == 0))这么改了一下就对了,谢谢了!

该学习了。。。
2006-12-22 14:27
快速回复:A - B的题目:
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011670 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved