日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 芯聞號 > 充電吧
[導讀]你可以直接用C語言去模擬一個集合,然后每讀入一個數字,做一次遍歷,如果找到就刪除。最后才排一次序輸出。雖然效率很低,時間復雜度有O(m*n),但對付這一題已經綽綽有余了。也可以0MS 0K AC掉。C


你可以直接用C語言去模擬一個集合,然后每讀入一個數字,做一次遍歷,如果找到就刪除。最后才排一次序輸出。
雖然效率很低,時間復雜度有O(m*n),但對付這一題已經綽綽有余了。也可以0MS 0K AC掉。

Code:


#include#includeint?cmp(const?int?*a,?const?int?*b)
{
????return?*a?-?*b;
}

int?main(void)
{
????int?n,?m,?i,?j;
????int?s[101];
????
????while?(scanf("%d%d",?&n,?&m),?m+n)
????{
????????for?(i?=?0;?i?<?n;?i++)
????????????scanf("%d",?s?+?i);
????????for?(i?=?0;?i?<?m;?i++)
????????{
????????????scanf("%d",?s?+?n);
????????????for?(j?=?0;?s[j]?!=?s[n];?j++);
????????????if?(j?!=?n)?s[j]?=?s[--n];
????????}
????????qsort(s,?n,?sizeof(int),?cmp);
????????for?(i?=?0;?i?<?n;?i++)
????????????printf("%d?",?s[i]);
????????printf(n???"n"?:?"NULLn");
????}
????
????return?0;
}




如果你討厭用線性的查找方式,也可以修改一下。配合使用庫函數的二分找和快速排序,來實現。
但對付這題來說,有點殺雞用牛刀的感覺,呵呵。
Code:


#include#includeint?cmp(const?int?*a,?const?int?*b)
{
????return?*a?-?*b;
}

int?main(void)
{
????int?a;
????int?b;
????int?i;
????int?n;
????int?*p;
????int?s[128];
????
????while?(scanf("%d%d",?&a,?&b),?a?||?b)
????{
????????for?(i?=?0?;?i?<?a?;?i++)
????????????scanf("%d",?s?+?i);

????????qsort(s,?a,?sizeof(int),?cmp);

????????for?(i?=?0?;?i?<?b?;?i++)
????????{
????????????scanf("%d",?&n);
????????????p?=?bsearch(&n,?s,?a,?sizeof(int),?cmp);
????????????if?(p)
????????????{
????????????????a--;
????????????????*p?=?s[a];
????????????????qsort(s,?a,?sizeof(int),?cmp);
????????????}
????????}

????????if?(a)
????????{
????????????for?(i?=?0?;?i?<?a?;?i++)
????????????????printf("%d?",?s[i]);
????????????putchar('n');
????????}
????????else
????????????puts("NULL");
????}

????return?0;
}



其實我們可以用歸并排序的思想來做。效率從O(m*n) -> O((m+n)log2(m+n))



#include#includeint?cmp(const?int?*a,?const?int?*b)
{
	return?*a?-?*b;
}

int?main(void)
{
	int?n,?m,?i,?j,?c;
	int?s[128];
	int?t[128];
	
	while?(scanf("%d%d",?&n,?&m),?m+n)
	{
		for?(i?=?0;?i?<?n;?i++)
			scanf("%d",?s?+?i);
		for?(i?=?0;?i?<?m;?i++)
			scanf("%d",?t?+?i);
		qsort(s,?n,?sizeof(int),?cmp);
		qsort(t,?m,?sizeof(int),?cmp);
		for?(c?=?i?=?j?=?0;?i?<?n?&&?j?<?m;)
		{
			if?(s[i]?<?t[j])
				printf("%d?",?s[i++],?c++);
			else?if?(s[i]?>?t[j])
				j++;
			else
			{
				i++;
				j++;
			}
		}
		for?(;?i?<?n;)?printf("%d?",?s[i++],?c++);
		printf(c???"n"?:?"NULLn");
	}
	
	return?0;
}



其實這些集合的操作都包含在C++的set類庫里了。
這時候用C++編碼真是提速不少。詳請參見參考代碼。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉