bluegyfrys 发表于 2015-2-15 10:57:27

看看学习一下~

bricker 发表于 2015-3-13 20:41:47

{:1_1:}

weiqi7777 发表于 2015-3-14 14:18:41

1、
        使用异或 能对两个整数 进行交换。
       
        原理是a = a^b^b
        第一步*y = *x ^ *y
        第二步*x = *x ^ *y = *x ^ *x ^ *y = *y ,就把*y的值交给*x
        第三步*y = *x ^ *y = *y ^ *x ^ *y = *x,就把*x的值交给*y了
       
2、
        当输入是1,2,3,4,5,的时候,最中间的一次交换 是 把 3的值和3的值交换,
        这个时候就出现问题,因为传递给函数的*x和*y的x,y地址是一样的。所以对其中
        任何一个值修改,都会对另外一个进行修改

        当进入到函数后,*x和*y的地址是一样,值都为3.
        执行完第一步, *y = *x ^ *y    *y 的值是0因为3^3 = 0
        但是因为x,y地址是一样,所以*x的值也是0了。
        所以后面两步执行下来,结果就把*x和*y的值都改为0了,所以结果有0

3、
        代码只要如果 first == last的时候,不执行交换函数就行了。

谁也不欠谁 发表于 2015-3-24 15:52:43

头尾对调的部分不懂,感觉很有意思

huangturen 发表于 2015-3-25 12:55:05

看看什么意思????

世界人生 发表于 2015-3-26 15:54:04

{:1_1:}

stopit 发表于 2015-3-27 09:27:51

{:1_1:}111111111111111116

无情一刀 发表于 2015-3-28 22:00:10

看看答案

10号的UV 发表于 2015-3-29 21:31:24

楼主加油,鱼C加油!我们都看好你哦!

YANOTME 发表于 2015-4-1 18:44:52

激动人心,无法言表!

晴天般微笑2015 发表于 2015-4-5 20:19:26

2.中间的0是由于swap函数中,指针x和y指向同一个内存位置,所以三条语句都是两个相同的数进行异或,故最终*x,*y都为0.
3.将for语句中截止条件改为first<last.

183715043 发表于 2015-4-7 11:01:48

答案

xbl179909 发表于 2015-4-7 14:34:42

真是难得给力的帖子啊。

王国庆 发表于 2015-4-19 00:03:41

强烈支持楼主ing……

修止符 发表于 2015-4-26 15:46:26

回复看答案

jahdhads 发表于 2015-4-26 19:18:43

强烈支持楼主ing……

jahdhads 发表于 2015-4-26 19:20:19

可以这样修改,不知道原来代码的错误


void reverse_array(int a[], int count)
{
      int first, last;
      
      for( first=0, last=count-1; first <= last; first++, last-- )
      {
                      if(first == last);
                     
                      else
                inplace_swap(&a, &a);
      }
}

yaoweifei 发表于 2015-4-28 23:54:58

强烈支持楼主ing……

搓鱿鱼 发表于 2015-5-7 10:54:06

来学习..........................

xjb0202 发表于 2015-5-13 10:30:14

enenen!!!!!!!!!!!!!!!!!!!!!
页: 5 6 7 8 9 10 11 12 13 14 [15] 16 17 18 19 20 21 22 23
查看完整版本: 一道有意思的C语言试题