论坛首页 Java企业应用论坛

百度“变态比赛规则”算法题 java 的解法

浏览 28689 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2007-06-11  
longrm 写道
引用

10人的话:
最多可以多少场?
1,1,1,1,1,1,1,1,1,1
这样每个人都要与其它人踢。。。
10+9+8+7+6+5+4+3+2+1=
2,1,1,1,1,1,1,1,1
这样只会少一场。。。就是第一队中的两个人不用互踢
10+9+8+7+6+5+4+3+2=

这个好像错了,自己是不会和自己踢的
1,1,1,1,1,1,1,1,1,1
场数应该是9+8+7+6+5+4+3+2+1=
......

终于发现写代码时有个bug改了又改,就是不合理,
发现原来这个原因。。。
PS:由于有测试用例。。。。一点点改
终于写出如下的代码,但这么写对于我的构想只是MS正确而已
	public int maxImpossable(int poples){
		
		if(poples==2){
			return 1;
		}else if(poples<1){
			return 0;
		}
		poples--;
		return maxImpossable(poples)+poples;//这里的+poples的解释很头痛
	}
0 请登录后投票
   发表时间:2007-06-11  
皑皑,当时我比赛的时候做这个题用的是分类搜索,结果只通过3个数据集.
0 请登录后投票
   发表时间:2007-06-11  
Eastsun 写道
皑皑,当时我比赛的时候做这个题用的是分类搜索,结果只通过3个数据集.
楼上把所有的数据集都给出来试试。。。
0 请登录后投票
   发表时间:2007-06-11  
这个我咋知道哩,是由baidu来测试的.
不过我对我现在的算法很有信心,得到的结果应该是没问题的.
0 请登录后投票
   发表时间:2007-06-11  
又问了几个人,发现还是有看不懂的画个图看看还有没有进步

得出结论,如果两个小组合并为一个的话,

总场次数=原场次数  -(减去) 两小组之间的场次数

两个小组之间的场次数为两个小组人数相乘。(2,3)总场次数为6场。
  • 大小: 108 KB
0 请登录后投票
   发表时间:2007-06-11  
其实我也没仔细看楼主的代码,不过楼主的话到让我有了看楼主代码的兴趣.
let me 瞧瞧,o(∩_∩)o...
0 请登录后投票
   发表时间:2007-06-11  
如果只是为了得出结论上周四我就完成了。。。
我只是想把想法试着讲给四个人听,
现在还有一个不懂。。。。
正在努力中。。。。
由于语文能力有限,
浪费了很多口舌,
用图一次完成了。。。二个人的理解。

如果想看明白代码的朋友先可以运行一下main方法,
之后改动people的值来看看其工作流程

再看junit的测试方法,
我写的顺序与编码顺序是一样的,

如果能理解测试用例之后再看代码。
代码为了能看明白没用经典数学公式。


一句话,只是让别人看明白的代码段。。。
0 请登录后投票
   发表时间:2007-06-11  
话说看别人写的代码还真是件很痛苦的事情,尤其涉及到算法....
不过觉得楼主的代码还有优化的余地.
比如"
public int maxImpossable(int poples){   
           
        if(poples==2){   
            return 1;   
        }else if(poples<1){   
            return 0;   
        }   
        poples--;   
        return maxImpossable(poples)+poples;   
    }  

其实由代码已经可以推导出maxImpossable( poples) =poples*(poples-1)/2
这样就可以将时间复杂度为O(N)的方法降低到O(1)了.

再看看,看不懂就不看了.
0 请登录后投票
   发表时间:2007-06-11  
另外,为什么不直接建立一个List<Integer>而要弄个List<String>,搞得后面还要解析一次?
0 请登录后投票
   发表时间:2007-06-11  
Eastsun 写道
另外,为什么不直接建立一个List<Integer>而要弄个List<String>,搞得后面还要解析一次?

1.4是客户服务器的主流配置,
虽然我有1.5,为了防止我要教的人不会因为版本问题调程序
只要写1.4的方式,可以少考虑很多问题。。。

引用
其实由代码已经可以推导出maxImpossable( poples) =poples*(poples-1)/2

如果对方不记得Sn(n) 的公式,又是一堆口水。。。。

我认为用java开发就用java来思考,
用所能用的最好理解的方式,
用代码说出思考的过程。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics