| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1562 人关注过本帖
标题:[原创]T小孩出局 出错前后 值得大家思考(新手来看)
只看楼主 加入收藏
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
 问题点数:0 回复次数:7 
[原创]T小孩出局 出错前后 值得大家思考(新手来看)

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 弑神饕餮 QQ:468013111
*/ 时间: 2007-7-25 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


今天基本上都耗在这个题上了,有所感悟,觉得有些东西值得再三考虑之后再动手来做,先让我们来看这个小程序,再告诉大家我为什么有此感悟~~~

题目是这样的:一群小孩围成一圈,任意假定一个数m,从每一个小孩起,顺时针方向数,每数到m个小孩时,就将该小孩T出去,然后从下一个继续数,小孩不断离开,圈子不断缩小。最后剩下的那个就是胜利者。求解最后胜利的是第几个小孩。题目要求:用数组来做。

这是我一开始写得代码,错了~~~大错特错~~~


public class josephus {
public static void main (String[] args) {
int sum=0;
int m=3;
int a[]={0,1,2,3,4,5,6,7,8,9};

for(int i=0;sum<9;i+=3){

while(i>9){
i-=10;
}
while(a[i]==10){
i++;
}


a[i]=10;
sum++;


}

for(int i=0;i<10;i++){
if(a[i]!=10) System.out.println("the winner is "+a[i]);
}
}
}

做出来之后我很兴奋,谁知道一试结果得不到我所要的结果,我很沮丧,下午,我静下心来,重新看了好多便代码终于发现了一个致命的错误,使我的代码完全就是错误的~~~于是我重写了代码,我怀着虔诚,虚心的态度改了又改,终于让我做出另我满意的程序(如下),我又好高兴好高兴~~~


public class xiaohai {
public static void main (String[] args) {
final int M=3,N=10;//M为指定个数,N为小孩的个数

int a[]=new int[N];
int n=0,sum=0;//n与M搭配 sum为被T出小孩的个数

for(int i=0;sum<N-1;i++){
if(i>N-1) i=0;
while(a[i]==10){
i++;
if(i>N-1) i=0;
}

while(a[i]!=10){
n++;
if(n==M){
sum++;
n=0;
a[i]=10;//若被T出则另a[i]=10 作为标志
}
i++;
if(i>N-1) i=0;

}
}

for(int i=0;i<N;i++){
if(a[i]!=10) System.out.println("the winner is "+i);
}

}

}

然后,高兴过后,我又仔细思考了我前一个题的致命错误,想了一下,如果用jdk1.5中的list容器,就不会出现这样的错误,而且代码会变得清晰明了,所以又打算用list来重写代码,可是想到自己对容器还不熟悉,所以没写,但让我悟出了开头说的道理——有些东西值得再三考虑之后再动手来做~~~

搜索更多相关主题的帖子: 小孩 出局 中国 思考 
2007-07-25 17:32
jerry_shen
Rank: 1
等 级:新手上路
帖 子:77
专家分:8
注 册:2007-7-25
收藏
得分:0 
明显应该用Vector或者ArrayList嘛。

2007-07-25 17:43
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
得分:0 
回复:(jerry_shen)明显应该用Vector或者ArrayList嘛...

所以我说要再三考虑才能下手嘛,而且容器那部分还没有怎么看那,只是有点点印象而已~~~而且题目要求是用数组做,是数组部分的一个联系题~~


爱情如潮水般滚滚迩来,总有一天滚滚滚回去!!天长地久惟有java!
2007-07-25 17:51
J华
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-7-2
收藏
得分:0 
终于再见到我稍微熟悉点的结构化语言了...呵呵 以前用C链表写出这个的时候也很兴奋!

不过我认为 LZ 用java写它能不能写出java的特点啊,好让新手了解下java的面象对象..呵呵

另外自己一直(快2个星期了)在看java技术手册,感觉不太适合新手.
2007-07-26 00:48
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
得分:0 
回复:(J华)终于再见到我稍微熟悉点的结构化语言了....

是啊 我这个方法 用C也能写 因为它要求用数组嘛 所以我只能用数组了 听说用链表做要简单的多 但是用JAVA中的容器 会更简单
java技术手册?我没看过啊。。。不过听 千里冰封 推荐过这本书 可是我觉得 新手入门应该随便找一本书 只要全一点就行 不要看太高深的书 像thinking in java 这样的看起来有点难度不适合新手去看 要看的话 去看中国人写的 他会告诉你java的大体框架 但不要指望只靠那一本书就能学好 j2se。我一直以为中国有关的java书没有好的,但是我昨天我发现我这个想法是多么的愚蠢,中国IT人士如此厉害怎么会没有本好书呢?昨天看了一本张孝祥的书觉得写得就很不错,不过是电子版的而且版本有点过时用的是jdk1.4~~~我还是支持书要看用纸做的,嘿嘿,希望对你能有点帮助,我也是个新手,大家一起加油加油~~~~


爱情如潮水般滚滚迩来,总有一天滚滚滚回去!!天长地久惟有java!
2007-07-26 09:15
无缘今生
Rank: 2
等 级:新手上路
威 望:3
帖 子:523
专家分:7
注 册:2007-6-25
收藏
得分:0 
楼主以后写代码的时候还是加点说明嘛,我看了好久哦。

时不再来!!!
2007-07-28 18:02
弑神饕餮
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2007-6-6
收藏
得分:0 
回复:(弑神饕餮)回复:(J华)终于再见到我稍微熟悉...
接受批评,不过。。。这个也要加啊?

爱情如潮水般滚滚迩来,总有一天滚滚滚回去!!天长地久惟有java!
2007-07-28 18:03
antiantixy
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-7-10
收藏
得分:0 

典型例子相信大家都已经熟悉了~


2007-07-28 21:12
快速回复:[原创]T小孩出局 出错前后 值得大家思考(新手来看)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049563 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved