今天上机的题目是24点
四个数 四个运算符 判断能否组合成24
我编了个小程序 打出了所有64种情况
例如
if (a[0] + a[1] + a[2] + a[3] == 24) {
System.out.println("Yes");
return;
}
if (a[0] + a[1] + a[2] - a[3] == 24) {
System.out.println("Yes");
return;
}
if (a[0] + a[1] + a[2] * a[3] == 24) {
System.out.println("Yes");
return;
}
……
我也把同样的方法用在了我同桌的程序上
不过用的是C
我们都通过了测试 但效率上有着极大的差距!
这是我的程序:
java-1.6 6150B 267行 0.088 3904K
然而他的程序却是
gcc-3.3         3818B  69行 0.004  0K
以上几项分别是
语言                代码         用时     内存
我们的代码除了输入输出是各自用两种语言的函数
其余完全一样(我的代码行数更多因为我的每个if都写成了四行 而他只有一行)
为何会产生这么大的差异?
为啥我的64个if会耗用掉3M的内存?
求高人解答!

解决方案 »

  1.   

    我又查了一下以前的程序
    发现所有用java编写的程序都有这种情况
    这是网络教室的问题么?
    还是语言导致的?
      

  2.   

    java中每次返回都要从新运行方法,而C是一次搞定,java慢是理所当然的
      

  3.   

    java经过jvm所以慢,不过也正是jvm才可以跨平台
      

  4.   

    这种比较是完全不懂java
    -----------------------
    众所周知,java运行于jvm中,而jvm可以由很多公司实现,并且实现方式也是不一样的譬如,有的实现可以在第一次运行时候将字节码转换成本地c代码,这样第一次比较耗时,后来耗时就短了还有的实现,全程解释执行字节码,效率当然低还有的实现,在先解释运行字节码一段时间,在这段时间里找出程序的热区,将其仔细优化,转换成本地c程序,这样执行效率是相当高的-----------------------
    同样的程序,在sun hotspot1.5,1.6中运行效率也是不一样的即使同时1.5,在sun hospot中运行和在IBM j9 1.5中运行效率也是不一样的还有JRockit等等jvm实现原因就在于上面所说的,不同的公司可以想尽办法尽可能优化字节码的执行
      

  5.   

    Java的执行速度肯定比C慢
    因为Java是解释型语言,编译后不直接产生机器指令代码,只是生成JVM看得懂的中间代码,执行时要由JVM把它翻译成本地的机器指令代码。而C语言程序就不会有这个中间过程。但这恰恰也是Java之所以能跨平台的原因,因为所有跟本地平台打交道的事情都委托给JVM去做了。
      

  6.   

    还有这个:http://hi.baidu.com/freish/blog/item/b793042433594a3fd40742bf.html
      

  7.   

    另外,sun hotspot还有-client和-server模式。效率是大大不一样的
      

  8.   

    其实,这好比委托别人办事,找个办事效率高的人,一下子就办好了,找个懒散的人,半天搞不好这里,自己就好比是c程序,委托人就是jvm