黑马程序员技术交流社区
标题:
想不通,求指导思路。<已解决>
[打印本页]
作者:
王德升
时间:
2012-4-24 16:42
标题:
想不通,求指导思路。<已解决>
本帖最后由 王德升 于 2012-5-10 17:39 编辑
class Demo
{
public static void main(String[] args)
{
int n=3,m=8
system.out.println("n="+n+",m="+m);
}
}
然后老师说:第一种方法:①n=n^m ; 第二种方法:①11=3+8即n=n+m
②m=n^m;// (n^m)^m; ②3=11-8即m=n-m
③n=n^m;// n(n^m); ③8=11-3即n=n-m
①→②我懂,但是②→③我不太明白。
我的思路:①→②n是变量,m是不变的,所以m=(n+m)-m=n。
②→③n是不变的,m是变量,所以n=n-(n-m)=m。
我的思路对吗?
作者:
龚正军
时间:
2012-4-24 16:58
本帖最后由 龚正军 于 2012-4-24 19:53 编辑
首先你要理解2个问题:
一是:什么是变量:(啊,这也要理解?)变量定义书本有我不重复,我要说的是:变量就是:可以变更的量(估计你觉得是废话,但这很重要),既然是在变更的量,那么你首先要跟上他的变化,
你之所以没看懂,其实简单来说就是没跟上变量的变化!!知道这点我们再来分析:
我们先不说^,(留给你自己理解我讲的后自己体会),我们直接讲第二种方法。
我们一步步分析:
int n=3,m=8----------------------------n,m都被定义成了int型的变量,都是变量(如果这有问题,你应该补充下基础了,不好意思之前用词不当,多包涵,现在改掉)
①11=3+8即n=n+m------------------------n变了,变成11了,(他是变量,要随时变的,跟上它怎么变才行,这是第一次变)
②3=11-8即m=n-m------------------------m变了,变成3了。因为右边的n是上面最后次变化的11,右边m是8.那么左边m最后变化成了3(跟上变量的变化)
③8=11-3即n=n-m------------------------n变了,因为这里面的右边个n是上面最后次变化的11,m是上面最后次变化的3,最后左边的n最终变化成8
作者:
常万
时间:
2012-4-24 17:39
①11=3+8 即n=n+m
②3=11-8即m=n-m
③8=11-3即n=n-m
int m;
int n;
开始换位
n=n+m; 记住这个时候n已经变化了,下面在使用n的时候就是n=(n+m)
m=n-m 这句话就是m=(n+m) -m 因为上面一句已经把n变为n+m
n=n-m 这句话你就可以直接把上面的n和m的值拿下来用(n+m)-((n+m)-m)
我当初理解就是这样的。。。
作者:
王德升
时间:
2012-4-24 17:47
龚正军 发表于 2012-4-24 16:58
首先你要理解2个问题:
一是:什么是变量:(啊,这也要理解?)变量定义书本有我不重复,我要说的是:变量 ...
懂了谢谢,那你给我说说^。
作者:
毕博
时间:
2012-4-24 18:42
补充一下吧
n^m = 什么都不是
但是如果 n^m^m =n
或者 n^m^n =m
这时候你发现了吧,如果同时出现两个相同的在一起^,就会体现剩下那个
如果你懂了^这个意义,直接这么出现一下就能看出来
作者:
龚正军
时间:
2012-4-24 19:10
本帖最后由 龚正军 于 2012-4-24 19:54 编辑
刚下班,出去买菜,刚回来!!,好的,我继续跟你讲解第一种方法。其实你可以自己解释^更有映像些。
其实他跟第二种方法唯一区别就是,你要明白一个前提!!
前提是:任何对象或者数据,比如是x,在2次异或相同密码(对象或者数据)后都会还原的原则。如:我们设置个密码(对象或者数据)为:m,那么x^m^m=x 知道和理解了这根本性的问题后我们才能往下看!!
---------------------------------割掉----------------------------------------------
然后我们就可以很轻松的根据第2个方法来解释第一个方法了。道理是一样的,跟上变量的变化!!!
第一种方法:①n=n^m ; ---------------------------------n变了,变成n^m了,(我们不去管具体是什么,只知道他变成n^m了)
②m=n^m;// (n^m)^m; ---------------------------------m变了,变成n了,(因为右边的n已经是上边最后次变化的n^m了,所以这点就相当于最开始的那个n^m^m,我们都知道2次异或相同密码会得到原结果,------看分割线上面所以得n)
③n=n^m;// n(n^m); -------------------------------------n又变了,变成m了,(因为n上面最后次变化还是n^m,m上面最后次变成了n,那么就相当于n^m^n = m^n^n = m)
对于之前答复有用词不当的地方,我已经编辑过了,楼主同学多包涵!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2