题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2034
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int m,n; int A[100]={0},B[100]={0}; while(cin>>m>>n) { int t,flag=0; if(m==0&&n==0) break; for(int i=0;i<m;i++) cin>>A[i]; for(int j=0;j<n;j++) cin>>B[j]; for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(A[i]==B[j]) { A[i]=-1; } } //下面的for语句是为了判断A集合中的元素是否全包含在B集合中 for(int i=0;i<m;i++) { if(A[i]!=-1) { flag=1; //做标记flag=1证明A集合去掉与B集合相同的元素后,不为空 flag=0表明A集合变为空了 break; } } if(flag==0) cout<<"NULL"; if(flag==1) { //下面的二重循环是冒泡排序,顺序由小到大 for(int i=0;i<m;i++) for(int j=0;j<m-i-1;j++) { if(A[j]>A[j+1]) { t=A[j]; A[j]=A[j+1]; A[j+1]=t; } } for(int i=0;i<m;i++) if(A[i]!=-1) cout<<A[i]<<" "; } cout<<endl; } system("PAUSE"); return EXIT_SUCCESS; }
这题的代码有点乱,思路不是很好,应该有更简洁的方法,开始时忘记排序了,还有就是输出格式不正确,注意细节!