‘编程相关’ 的存档; 分类

三个商人和三个随从的Java程序实现与分析非MatlAB

三个商人和三个随从的Java实现与分析

Java程序如下:

import java.util.*;
public class Test4{
/**内部类,用来把保存过河过程中的路线和状态.
* 五个属性:
* to为ture表示去对岸,否则表示从对岸返回。同时true也表示船在本岸,false表示船在对岸.
* busiMansInBoat为在船里的商人数.
* servsInBoat为船里的仆人数.
* residualBusiMans为岸上的商人数,to为true时,表示是本岸.
* residualServants为岸上的仆人数,to为true时,表示是本岸.
*/
static class Path{
boolean to;
int busiMansInBoat;
int servsInBoat;
int residualBusiMans;
int residualServants;
Path(boolean to,int bmib,int sib,int rb,int rs){
this.to=to;
busiMansInBoat=bmib;
servsInBoat=sib;
residualBusiMans=rb;
residualServants=rs;
}
/*比较两个状态是不是相同.
*/
public boolean equals(Path p){
if(to==p.to){
return busiMansInBoat==p.busiMansInBoat&&servsInBoat==p.servsInBoat
&&residualBusiMans==p.residualBusiMans&&residualServants==p.residualServants;
}else if(to){
return busiMansInBoat==p.busiMansInBoat&&servsInBoat==p.servsInBoat
&&residualBusiMans==3-p.residualBusiMans-p.busiMansInBoat&&residualServants==3-p.residualServants-p.servsInBoat;
}else{
return busiMansInBoat==p.busiMansInBoat&&servsInBoat==p.servsInBoat
&&3-residualBusiMans-busiMansInBoat==p.residualBusiMans&&3-residualServants-servsInBoat==p.residualServants;
}
}
public String toString(){
if(to){
return "本岸(商人"+residualBusiMans+"个,仆人"+residualServants+"个)—–>" 
+"[船上:"+busiMansInBoat+"个商人,"+servsInBoat+"个仆人]—–>" 
+"对岸(商人"+(3-residualBusiMans-busiMansInBoat)+"个,仆人"+(3-residualServants-servsInBoat)+"个)";
}else{
return "本岸(商人"+(3-residualBusiMans-busiMansInBoat)+"个,仆人"+(3-residualServants-servsInBoat)+"个)<—–" 
+"[船上:"+busiMansInBoat+"个商人,"+servsInBoat+"个仆人]<—–" 
+"对岸(商人"+residualBusiMans+"个,仆人"+residualServants+"个)";
}
}
}
//保存路线的List 
public static List<Path> pathList=new ArrayList<Path>();
/**过河方法.
* @param businessmans 商人数.
* @param servants 仆人数.
* @param schemes 方案集合.
* @param to 去还是返回,同时也表示是否在对岸.
*
*/
public static void passRiver(int businessmans,int servants,int[][] schemes,boolean to){
if(!to&&businessmans==3&&servants==3){
System.out.println("结果");
for(Path p : pathList){
System.out.println(p);
}
return;
}
int schemesStart=0; //从方案集中的那一种方案开始选择. 
if(to){
schemesStart=2; //如果在本岸,则从第3种方案开始选择. 
}
for(int i=schemesStart;i<schemes.length;i++){
int residualBusiMans=businessmans-schemes[i][0]; //按照方案岸上所剩商人数. 
int residualServants=servants-schemes[i][1]; //按照方案岸上所剩仆人数. 
if(residualBusiMans<0||residualServants<0){ //如果商人数或仆人数小于0,重新选择方案. 
continue;
}
if(residualBusiMans!=0&&residualBusiMans<residualServants){ //如果仆人数大于商人数,重新选择方案. 
continue;
}
if(3-residualBusiMans!=0&&3-residualBusiMans<3-residualServants){ //如果对岸的仆人数大于商人数,重新选择方案.
continue;
}
//按本方案,生成路线. 
Path p=new Path(to,schemes[i][0],schemes[i][1],residualBusiMans,residualServants);
if(!isRepeat(p)){ //如果没有重复. 
pathList.add(p);
passRiver(3-residualBusiMans,3-residualServants,schemes,!to); //从对岸返回. 
pathList.remove(pathList.size()-1); 
}
}
}
/**看看当前的路线是不是和以前的重复了.
*/
public static boolean isRepeat(Path p){
boolean repeat=false;
for(Path temp : pathList){
if(temp.equals(p)){
repeat=true;
break;
}
}
return repeat;
}
public static void main(String[] args)throws Exception{
//过河方案,每一种方案为一个一组数组,比如{1,0}表示船上要坐1个商人和0个仆人。方案可以用一个方法来生成: 
int[][] sckemes={{1,0},{0,1},{1,1},{2,0},{0,2}};
passRiver(3,3,sckemes,true);
}
}

输出结果为:

阅读全文

Java程序员的前景如何

Java的相关方面Quicl之前找过许多的资料,不嫌弃的话大家可以在最上面的编程—>Java中看到。我感觉Java的话普遍薪水不是很高,而基于JVM的另外一种语言Scala是非常优秀的人群在使用。小的说,在中国投行中做数据后台都是Scala在做,用Ruby的现在也向Scala转移,年薪很高哦。大点说,包括世界顶级投行,美国那边更是由Twitter掀起来使用Scala进行大数据处理的风潮。不过对于我们程序员来说,Scala的数学不是难点……难点在于许多的金融方面的知识欠缺……各位找个学金融的好搭档现在开始学习吧!

ACM中为何不选择Java

ACM大多数同学还是在OJ上面刷题,大部分都用的是C语言。可是大家知道ACM为什么不用Java、Python等语言呢?

实际上,OJ是支持这些语言的。在中国大学,几乎每个大学生接触到的第一门编程语言就是C语言了,比如我所在的西安工业大学 计算机系就是这样的。OJ由于服务器的局限性,以及C语言无可比拟的底层性高灵活性使得OJ中以C为主。

随着代码规模的扩大,C不能满足同学们对高效编码的需求使得C++这个面向对象的语言在ACM中广为使用。不论ACM采用什么语言,C++是不可争辩的优秀语言之一。他的方便快捷的开发属性、不失底层语言的特征使得这个外人所称“不伦不类”的语言真的在对时间、空间等要求高的场合应用。ACM是个拼时间、拼效率的赛事。

C++的底层性使得ACM比赛选手可以更大程度的优化代码效率,C++的面向对象特征使得参赛选手更快的完成刷题任务。

不过C++最近今年受到了Java的挑战,Oracle接手Sun的JDK后,发布的JDK7使得其Java代码执行效率大大提高,有媲美C++等直接底层源码的优势。可是,媲美归媲美,性能还是差那么一点点的。

由于Java需要JDK的支持,ACM中许多OJ并没有安装最新版本的JDK,使得OJ中Java的效率总是很低。可是这个情况即将大为改观,作为云计算、物联网的先头兵,Java以其无可比拟的高效开发占据了软件行业的半壁江山。由于搞ACM的大多还要进入社会求职的,所以Java的编码在OJ的刷题工程中有上升趋势。

ACM为何不选择Java?这个是个事实,也就是由于之前JDK的性能影响,JDK在绝大多数ACMer口中被贬低了许多。ACM为何选择Java?是由于Java本身就是一门优秀的语言,由于ACM普及过程中作用非常大的OJ慢慢更新了JDK,所以Java成为了ACM中的潜力股。本来来源于Quicl’sBlog 转载注明出处链接 http://20xue.com/?p=2502

C与Windows驱动、内核编程、系统安全优秀书籍PDF下载

C与Windows驱动、内核编程、系统安全优秀书籍PDF资源下载由Quicl网络收集整理。仅供个人参考,如需使用请购买正版书籍。本资源如涉侵犯您的合法权益,请及时与Quicl沟通。

阅读全文

This is my friend

看到这里,你应该知道,这个不是建站经验贴,只是一个心路回顾而已。之前有发过《做站一年来的经验总结》,感兴趣的朋友可以看看上面这个。——Quicl

去年的今天,我建立的这个博客。一转眼,正好一年了。

有人说,博客大多数人坚持不了一年。不是因为时间忙没有空闲更新,就是投入大没有回报不敢再“砸钱”了。非常的幸运,我属于那少数人。

这一年,由于许多的原因,博客面临过关闭,可是每次都会有个好的理由去坚持下去。意外的约稿让我有了持续写作的原始动力,间歇性的更新让我知道,只要坚持更新就会有不错的收录。

一年了,目睹许多博客的404,但同时看到的许多站点的Hello Word。感觉单单WP博客圈子,新老更迭非常频繁。也许是由于门槛低,导致了许多并不坚定做站的朋友误打误撞的进来了。同样的站,如果是Discuz!,一般生命周期就长很。或许由于WP是个入手快,发展容易,使得广大的博主转型为职业站长有了新的发展方向。不过不管怎么说,WP流动性真的很大。

玩WP就像其他人玩DNF、或者刷ACM一样,都是一个上瘾的事物。可是,如何处理博客和其他时间的冲突呢?一年的摸索知道了,该干什么就干什么这个别人早已烂熟于心的行为准则。

201324ezoijjdbjm9qr8uv

每个人都希望自己有个毫无拘束的空间,我承认,在博客我可以肆无忌惮。在网络,我可以随心所欲。我是个坚定的反“网络实名制”的普通博主,虽然我知道网络实名制可以限制那些网络诈骗的人……

在大学,比之前任何时候都自由。年轻,让我有走自己路的干劲,虽然不那么顺利,但我还是在磕磕碰碰的走着。

有时候,打开博客,看着那些评论,我在想,哪些是停留时间超过30S的真心评论呢?这个功利的博客大军,会不会非常早的就消亡了呢?

一年了,博客依然在更新,可是当初的Sea不是如今的Quicl了。之前单单找个网络自留地的自己转型米农+职业站长?我无法清晰的定义自己,我只知道,每天Java Code依旧,习惯性的买米依旧,马不停蹄的找终端依旧……

Ta成了我的朋友,成了我最亲密的朋友了。

Quicl祝大家龙年吉大运!

龙年大吉

JAVA自学之路

Quicl所在学院的大一学弟学妹们后半年即将学习Java了,鉴于网络上经验文章严重重复,Quicl特意寻找了一批高质量的经验文章给大家。本次转载的是尚学堂老大马士兵写的,很不错,很有见地!适合初学者和在学习编程中彷徨的朋友!

阅读全文

XATU二叉树的建立以及遍历

明天交数据结构作业,连夜赶工弄出如下代码…… 避免抄袭 希望大家在 2012年3月前不要转载该文,Quicl谢谢大家乐!二叉树的建立以及遍历C代码如下:

阅读全文

如何迅速成为Java高手

最近一直状态不好,今天索性就睡了一天。没有什么可以说的,转载专业方面基础知识给以广大喜欢折腾的同学,但是请注意。经验文章看多了,你不实践,照样没法成为高手。大家切记啊!

转载文章开始:如何迅速成为Java高手

Quicl也接到过很多学弟的咨询,可是由于自己不是高手啊,所以大家看看下面高手的经验:很多网友问我学习Java有没有什么捷径,我说“无他,唯手熟尔”。但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛!我编程我当然快乐,我是Quicl、伪Geeker。喜欢程序设计,ACM。

阅读全文

正则表达式的若干应用

我们学习Linux的BASH熟悉vim后,Shell环境下操作Linux虽不是得心应手,但也应该很熟悉了吧。下面Quicl与大家一起学习一个新的概念:正则表达式

阅读全文

回到顶部