今天上机的题目是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的内存?
求高人解答!
四个数 四个运算符 判断能否组合成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的内存?
求高人解答!
解决方案 »
- 新手提问 关于使用JDK1.6后 使用泛化报错的问题
- 关于数据库树型结构设计问题!请大家给点意见。
- 怎么设置Jpanel大小?菜鸟问!多个JPanel在一个JFrame上。JPanel之间的距离怎么控制?谢谢大侠啦!
- java可否引用传递一个对象?
- 为什么addWindowListener(winHandler)通不过啊,大家帮帮我啊?
- Java 操作更改微软TTS引擎语音
- 我自己新建了一个io类,主要是用来直接输入 integer 数据的.可不是不知道放哪儿才能被别的程序 import 到.请指教.[在线等]
- 谁能告诉我java.sun的中文代理,我的是学校机房,上不了国外网站
- 小弟在写MIS的東西,请大家介绍一下写SQL语句的经验!!!!!!
- Dom4j 修改节点内容的问题
- 菜鸟请进
- Java关于窗口最大化的事件是什么
发现所有用java编写的程序都有这种情况
这是网络教室的问题么?
还是语言导致的?
-----------------------
众所周知,java运行于jvm中,而jvm可以由很多公司实现,并且实现方式也是不一样的譬如,有的实现可以在第一次运行时候将字节码转换成本地c代码,这样第一次比较耗时,后来耗时就短了还有的实现,全程解释执行字节码,效率当然低还有的实现,在先解释运行字节码一段时间,在这段时间里找出程序的热区,将其仔细优化,转换成本地c程序,这样执行效率是相当高的-----------------------
同样的程序,在sun hotspot1.5,1.6中运行效率也是不一样的即使同时1.5,在sun hospot中运行和在IBM j9 1.5中运行效率也是不一样的还有JRockit等等jvm实现原因就在于上面所说的,不同的公司可以想尽办法尽可能优化字节码的执行
因为Java是解释型语言,编译后不直接产生机器指令代码,只是生成JVM看得懂的中间代码,执行时要由JVM把它翻译成本地的机器指令代码。而C语言程序就不会有这个中间过程。但这恰恰也是Java之所以能跨平台的原因,因为所有跟本地平台打交道的事情都委托给JVM去做了。