接上篇狗一入侵
狗一看到了英勇无畏的程序猿,立马吓尿了裤子,撒腿就跑,跑了一天一夜后,狗一望着自己已经晒干的裤子,感到丢了面子,懊恼无比,想着将来一定要报这一吓尿之仇,狗由于乱跑一起,并且狂奔了一天一夜于是迷了方向也不知道到了那里,正当狗一准备给麻麻打电话诉委屈的时候,抬头一看,居然看到了,单身狗的圣地国际知名大学西安科技大学。“哈哈,天不亡我狗一”,狗一这时想,既然来到了这处圣地,就应该找绝顶高手来帮忙,狗一进入了西安科技大学四处打听了一番,摸清了圣地的实力分布,欲寻绝顶高手,必上西科之巅,狗一继续往上走,又摸清了一些情况,原来在单身狗世界里一直流传的单身狗圣地,竟是一座囚牢,这里关押着传说中单身狗之王---》狗二,狗二就被囚禁在西科之巅,狗一想要解救单身狗之王狗二,让狗二和自己一起征战天下,但是西科之巅有一个一个凶残的程序猿守护,人称西科草王,西科草王凶猛异常,狗一又一次退缩了,正当狗一准备给麻麻打电话诉委屈的时候,突然听到耳边有人说,西科草王今天去补考了没办法守护西科之巅了,狗一赶忙挂了电话,“哈哈哈哈,天不亡我狗一”。。。。
终于狗一找到了狗二,狗一和狗二又一次的跋山涉水,和狗二一起跑了一天一夜,终于又一次来到了数组乐园,狗一抬头望去,这是。。。
这种光芒。。。,难道??? ,原来英勇无畏的程序猿换了一身衣服变成了机智的程序员。
数组:天哪!!他们是邪恶的单身狗
程序员:受死吧!!万恶的单身狗!!!
#include<iostream>
#include<assert.h>
using namespace std;
void find_singledog(int arr[], int len, int *num1, int *num2)
{
assert(arr!=NULL);//assert检测参数合法性良好的编程习惯
assert(num1!= NULL);
assert(num2 != NULL);
int temp = 0;
int count = 1;
for (int i = 0; i < len; i++)
{
temp = temp^arr[i];
}
while ((temp &count) == 0)//寻找相异的那一位,用于将数组一分为2,然后各自找出单身狗
{
count = count << 1;
}
for (int i = 0; i < len; i++)
{
if ((arr[i] & count) != 0)//注意不要写成arr[i] &count!= 0,注意运算符的优先级
{
*num1 = (*num1) ^ arr[i];
}
else
{
*num2 = (*num2) ^ arr[i];
}
}
}
int main()
{
int arr[] = { 1, 9, 9, 3, 4, 2, 5, 2, 7,7,11,5,111, 3, 4, 1 };
int len = sizeof(arr) / sizeof(arr[0]);
int num1 = 0;
int num2 = 0;
find_singledog(arr, len, &num1, &num2);//num1,num2返回型参数
cout << num1 << endl;
cout << num2 << endl;
system("pause");
}
狗一狗二被英勇无畏,机智聪颖,潇洒帅气的程序猿彻底的消灭了。。