麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

c::求數組中的異數~

2019-11-14 11:21:51
字體:
來源:轉載
供稿:網友

函數說明:

1)一個數組中有一個數出現了一次,其余的數字出現了兩次。

思路分析:

 A: 首先可能會想到的辦法是:再建一個數組,進行數組的遍歷,遇到相同的數,就放到新的數組中,最終剩下的就是異數。

 B:但是上面的這種辦法會有開空間的開銷,所以我們想到另外一種辦法:利用異或,我們知道異或就是相同的數異或為零,針對此題,最終異或下來的數就是異數。

#include<stdio.h>int main(){	int a[9] = {1,1,2,3,4,3,4,5,5};	int ret = 0;	int i = 0;	for(i = 0; i<9; i++)	{		ret ^= a[i];	}	PRintf("%d/n",ret);	return 0;}

2)一個數組中有兩個數出現了一次,其余的數字出現了兩次。

思路分析:

第一步:將所有的數字異或,得到結果是不同數字的異或結果第二步:找上部結果中此數任意位置是1的,記錄此位置第三步:找原數組中在此位置是1的數第四步:將你剛開始設置的變量為0的與是第三步中的數異或, 得到一個不同的數

第五步:將原來兩個數異或的結果與第四步中得到的不同數異或,得到另一個不同數

#include<stdio.h>void Find(int a[],int len,int *p1,int *p2){	int i = 0;	int res = 0;	int pos = 0; //記錄二進制位位1的位置	for(i = 0; i<len; i++)  //將所有數進行異或	{		res^=a[i];	}	for(i = 0; i<32; i++)   //找二進制位中任何位置是1的并記錄	{		if(((res>>i)&1) == 1)		{			pos = i;			break;		}	}	for(i = 0; i<len; i++)	{		if(((a[i]>>pos) &1) ==1)		{			(*p1)^=a[i];					}	}	*p2 = res^(*p1);	}int main(){	int a[10] = {1,1,2,4,4,5,5,3,6,6};	int len = sizeof(a)/sizeof(a[0]);	int *ret1 = 0;	int *ret2 = 0;	Find(a,len,&ret1,&ret2);	printf("%d/n",ret1);	printf("%d/n",ret2);	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费在线成人网 | 亚洲热线99精品视频 | 狠狠操精品视频 | 久久久久久久久国产 | 亚洲综合色视频在线观看 | 亚洲影视在线观看 | 日本一区二区在线 | 成人情欲视频在线看免费 | 久久国产91 | 久久综合精品视频 | 一级做人爱c黑人影片 | 免费欧美精品 | 娇妻被各种姿势c到高潮小说 | 亚洲日本高清 | 亚洲成人高清在线观看 | 欧美一区二区三区免费不卡 | 国内久久久久 | 日韩视频在线一区二区三区 | 欧美色另类 | 免费男女乱淫真视频 | 国产小视频一区 | 逼片视频| 国产在线一区二区三区 | 国产一国产一级毛片视频在线 | 美女在线视频一区二区 | 88xx成人精品视频 | 91在线色 | www.成人在线视频 | 麻豆传传媒久久久爱 | 五月天影院,久久综合, | 久久久久九九九女人毛片 | 精品国产一区二区三区四区阿崩 | 亚洲欧美在线视频免费 | 欧美爱爱视频免费看 | 蝌蚪久久窝 | 欧美中文字幕在线视频 | 久久久久久久久久网站 | 91懂色| 广州毛片| 欧美亚洲一区二区三区四区 | 国产女做a爱免费视频 |