给大家出道题玩玩啊 ,我想了好久才想出来。

Cloud__Apex 2009-07-28 05:31:33
给 两个变量 a , b 都是有值得整数,
问 不能利用其他的变量 交换 a 和 b 的值
...全文
253 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanglzlkn 2009-08-25
  • 打赏
  • 举报
回复
学习一下
Cloud__Apex 2009-07-31
  • 打赏
  • 举报
回复
谢谢了 原来还有这么多漂亮的算法,很抱歉 提了老题目 、
跟大家学习很开心
bigbug9002 2009-07-31
  • 打赏
  • 举报
回复
那我用乘和除
a=a*b;
b=a/b;
a=a/b;
fireseed 2009-07-31
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 joanlynnlove 的回复:]
引用 24 楼 fireseed 的回复:
补充一下题目,不许用加减,不许用异或,哇嘎嘎~~~


不能用加减号还是?
要不然还能用与运算的
具体忘了。
[/Quote]

其实很简单的!

__asm
{
……
}

明白了吗?哈哈!!
fireseed 2009-07-30
  • 打赏
  • 举报
回复
补充一下题目,不许用加减,不许用异或,哇嘎嘎~~~
acdbxzyw 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 fireseed 的回复:]
补充一下题目,不许用加减,不许用异或,哇嘎嘎~~~
[/Quote]

不能用加减号还是?
要不然还能用与运算的
具体忘了。
ToBeTough 2009-07-30
  • 打赏
  • 举报
回复
断了你们的路
[Quote=引用 24 楼 fireseed 的回复:]
补充一下题目,不许用加减,不许用异或,哇嘎嘎~~~
[/Quote]
LeonTown 2009-07-29
  • 打赏
  • 举报
回复


[Quote=引用 11 楼 tkminigame 的回复:]
这里必须要指出下,用两个变量交换数据的方法虽然很多人都知道,但有个隐患几乎没人提到过,当你无法保证两个变量是不是来自同一个引用,或者两个指针指向同一个内存地址时,这么做会出错。

举个例子

void main(){
int i = 10;
。。。
int *p = &i;
。。。
int *q = &i;
。。。
//交换两个指针指,但你可能并没检查他们是否是同一个值。
*p = *p^*q;//i = 0;
*q = *p^*q;//i = 0;
*p = *p^*q;//i = …
[/Quote]
acdbxzyw 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 morilasi 的回复:]
引用 11 楼 tkminigame 的回复:
这里必须要指出下,用两个变量交换数据的方法虽然很多人都知道,但有个隐患几乎没人提到过,当你无法保证两个变量是不是来自同一个引用,或者两个指针指向同一个内存地址时,这么做会出错。

举个例子

void main(){
int i = 10;
。。。
int *p = &i;
。。。
int *q = &i;
。。。
//交换两个指针指,但你可能并没检查他们是否是同一个值。
*p = *p^*q;//i = 0;
*q = *p^…
[/Quote]
碰到过这个问题,用指针操作时最好先判断一下。
tkminigame 2009-07-29
  • 打赏
  • 举报
回复
这里必须要指出下,用两个变量交换数据的方法虽然很多人都知道,但有个隐患几乎没人提到过,当你无法保证两个变量是不是来自同一个引用,或者两个指针指向同一个内存地址时,这么做会出错。

举个例子

void main(){
int i = 10;
。。。
int *p = &i;
。。。
int *q = &i;
。。。
//交换两个指针指,但你可能并没检查他们是否是同一个值。
*p = *p^*q;//i = 0;
*q = *p^*q;//i = 0;
*p = *p^*q;//i = 0;
}
deerwin1986 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tkminigame 的回复:]
这里必须要指出下,用两个变量交换数据的方法虽然很多人都知道,但有个隐患几乎没人提到过,当你无法保证两个变量是不是来自同一个引用,或者两个指针指向同一个内存地址时,这么做会出错。

举个例子

void main(){
int i = 10;
。。。
int *p = &i;
。。。
int *q = &i;
。。。
//交换两个指针指,但你可能并没检查他们是否是同一个值。
*p = *p^*q;//i = 0;
*q = *p^*q;//i = 0;
*p = *p^*q;//i = …
[/Quote]

呵呵 在这个问题上被坑过N次 大家注意吧。。。
大胖子哥 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 qq675927952 的回复:]
引用 7 楼 KingWolfOfSky 的回复:
无聊的老题目

C/C++ code
a^=b^=a^=b


确实是很优美的代码~~



up
[/Quote]
chowyi 2009-07-29
  • 打赏
  • 举报
回复
唉 不知道怎么玩
qq675927952 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 KingWolfOfSky 的回复:]
无聊的老题目

C/C++ code
a^=b^=a^=b



确实是很优美的代码~~
[/Quote]

up
morilasi 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 morilasi 的回复:]
引用 15 楼 tkminigame 的回复:
那本书上说了什么?
上面说在程序中执行检验是不可行的。
引用的就是你的这个例子。如果其中一个变量位于寄存器中,那这段代码会失败
因为不能取寄存器的地址
[/Quote]呃。不好意思,看错,那个跟你这个还不太一样。
那上面只是讲的
*p=*q^*p
*q=*p^*q
*p=*q^*p
morilasi 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tkminigame 的回复:]
那本书上说了什么?
[/Quote]上面说在程序中执行检验是不可行的。
引用的就是你的这个例子。如果其中一个变量位于寄存器中,那这段代码会失败
因为不能取寄存器的地址
xiaoyu821120 2009-07-29
  • 打赏
  • 举报
回复
a = a + b;
b = a - b;
a = a - b;
tkminigame 2009-07-29
  • 打赏
  • 举报
回复
那本书上说了什么?
timeblock 2009-07-29
  • 打赏
  • 举报
回复
a = a^b;
b = a^b;
a = a^b;

就这样,什么问题也没有,相当标准~~~
morilasi 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tkminigame 的回复:]
这里必须要指出下,用两个变量交换数据的方法虽然很多人都知道,但有个隐患几乎没人提到过,当你无法保证两个变量是不是来自同一个引用,或者两个指针指向同一个内存地址时,这么做会出错。

举个例子

void main(){
int i = 10;
。。。
int *p = &i;
。。。
int *q = &i;
。。。
//交换两个指针指,但你可能并没检查他们是否是同一个值。
*p = *p^*q;//i = 0;
*q = *p^*q;//i = 0;
*p = *p^*q;//i = 0;
}
[/Quote]见《C专家编程》第237页。
加载更多回复(10)

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧