返回

练习题

发布时间:2022-12-18 09:45:47 274

1.交换两个int变量的值,不能使用第三变量,即a=3,b=5,交换之后,a=5,b=3

#include
int main()
{
int a=3;
int b=5;
a=a+b;
b=a-b;
a=a-b;
printf("交换后:a=%d b=%d",a,b);
return 0;
}

这代码没有考虑到int值溢出的情况。

#include
int main()
{
int a=3;
int b=5;
a=a^b;
a=a^b;
b=a^b;
printf("交换后:a=%d b=%d",a,b);
return 0;
}

2.给出一个非空整形数组,除了某个元素出现一次以外,其余每个元素均出现两次,找出那个只出现一次的元素

例如:int a[]={1,2,3,4,5,1,2,3,4},该数组中只有5出现两次,其余数字都是成对出现的,要找出5

#include
int main()
{
int arr[]={1,2,3,4,5,1,2,3,4};
int i=0;
int sz=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<sz;i++)
{
int j=0;
int count=0;
for(j=0;j<sz;j++)
{
if(arr[i]==arr[j])
{
count++;
}
}
if(count==1)
{
printf("%d",i);
break;
}
}
return 0;
}

优化:3^3=0;5^5=0;0^3=3;0^5=5;3^5^3=5;3^3^5=5;

异或是满足交换律的

#include
int main()
{
int arr[]={1,2,3,4,5,1,2,3,4};
int i=0;
int ret=0;
int sz=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<sz;i++)
{
ret=ret^arr[i];
}
printf("%d",ret);
return 0;
}





特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线