46 人見人愛A-B

問題描述 :

A和B是兩個集合,A-B求的是兩個集合的差,就是做集合的減法運算。(當然,大家都知道集合的定義,就是同一個集合中不會有兩個相同的元素,這裏還是提醒大家一下)呵呵,很簡單吧?

輸入說明 :

輸入數據包含T個測試實例。

首先輸入數字T,然後輸入T組測試數據,每組輸入數據佔1行,每行數據的開始是2個整數n(0<=n<=100)和m(0<=m<=100),分別表示集合A和集合B的元素個數,然後緊跟着n+m個元素,前面n個元素屬於集合A,其餘的屬於集合B. 每個元素爲不超出int範圍的整數,元素之間由一個空格隔開.

輸出說明 :

針對每組數據輸出一行數據,表示A-B的結果,如果結果爲空集合,則輸出“NULL”,否則從小到大輸出結果,爲了簡化問題,每個元素後面跟一個空格.

輸入範例 :

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

輸出範例 :

2 3
NULL

c源碼:

#include<stdio.h>
#include<memory.h>
int main()
{
   int T,n,m,a[110],b[110],i,j,t,k,z;
   scanf("%d",&T);
  while(T)
   { memset(a,0,110);
     memset(b,0,110);
    scanf("%d%d",&n,&m);
	for(j=0;j<n;j++)
		scanf("%d",&a[j]);
	for(t=0;t<m;t++)
		scanf("%d",&b[t]);
	if(n<=0)
		printf("NULL\n");
  else
  {	t=0;
   	for(j=1;j<n;j++)
	{	
		for(k=0;k<=t;k++)
	           if(a[j]==a[k])
			   break;
		if(k>t)
		{
		t++;
		a[t]=a[j];
		}
	}
	n=t+1;
	   t=0;
   	for(j=1;j<m;j++)
	{	
		for(k=0;k<=t;k++)
	           if(b[j]==b[k])
			   break;
		if(k>t)
		{
		t++;
		b[t]=b[j];
		}
	}
	m=t+1;
   t=0;
   for(i=0;i<n;i++)
   {  z=0;
     for(j=0;j<m;j++)
      if(a[i]==b[j])
	  {  z=1;
	    break;
	  }
	  if(z==0)
	  {
	  a[t]=a[i];
	  t++;
	  }
   }
	if(t==0)
		printf("NULL\n");
	else
	{
	  for(i=0;i<t;i++)
		  for(j=0;j<t-i-1;j++)
			  if(a[j]>a[j+1])
			  {
			    z=a[j];a[j]=a[j+1];a[j+1]=z;
			  }
		for(i=0;i<t-1;i++)
	   printf("%d ",a[i]);
	  printf("%d \n",a[t-1]);
	}
  }
T--;
   }//T
   return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章