`
抛出异常的爱
  • 浏览: 620363 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

拳皇连招

阅读更多
从列表中找到录入的后N位
class KOFTest {
	@Test
	public final void testKoofFindOne() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABC");
		Assert.assertEquals("ABCD", koof);
	}
}


public class KOF {
	private static final int KEYLEN = 3;
	static List<String> list = null ;
	
	public KOF(List<String> asList) {
		this.list = asList;
	}

	public String koof(String str){
		for(String s : list){
//			System.out.println(str.substring(str.length()-3));
//			System.out.println(s.startsWith("ABC"));
			if(s.startsWith(str.substring(str.length()-KEYLEN))){
				return s;
			}			
		}

		
		return "";
	}

}



结束条件
找到第一个可以使用的串
	
	@Test
	public final void testKoofFindNone() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABE");
		Assert.assertEquals("ABE", koof);
	}
	@Test
	public final void testKoofFindOne() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABC");
		Assert.assertEquals("ABCD", koof);
	}
	@Test
	public final void testKoofFindTwo() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDF", koof);
	}

	public String koof(String str){
		List<String> select = new ArrayList<String>();
		for(String s : list){
			System.out.println(str.substring(str.length()-3));
			if(s.startsWith(str.substring(str.length()-3))){
				select.add(s);
			}			
		}
		System.out.println(select);		
		for(String s  : select){
			return str+s.substring(s.length()-1);
			
		}
		
		return str;
	}
}




底归
	@Test
	public final void testKoofFindNone() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABE");
		Assert.assertEquals("ABE", koof);
	}
	@Test
	public final void testKoofFindOne() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABC");
		Assert.assertEquals("ABCD", koof);
	}
	@Test
	public final void testKoofFindTwo() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDF", koof);
	}
	
	@Test
	public final void testKoofFindTree() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDE","CDEF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDEF", koof);
	}

	public String koof(String str){
		List<String> select = new ArrayList<String>();
		for(String s : list){
			System.out.println(str.substring(str.length()-3));
			if(s.startsWith(str.substring(str.length()-3))){
				select.add(s);
			}			
		}
		for(String s  : select){
			return koof(str+s.substring(s.length()-1));
			
		}		
		return str;
	}


选择最长路线
	@Test
	public final void testKoofFindNone() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABE");
		Assert.assertEquals("ABE", koof);
	}
	@Test
	public final void testKoofFindOne() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABC");
		Assert.assertEquals("ABCD", koof);
	}
	@Test
	public final void testKoofFindTwo() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDF", koof);
	}
	
	@Test
	public final void testKoofFindThree() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDE","CDEF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDEF", koof);
	}
	
	@Test
	public final void testKoofFindTree() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDF","BCDE","CDEF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDEF", koof);
	}
	public String koof(String str){
		List<String> select = new ArrayList<String>();
		for(String s : list){
			System.out.println(str.substring(str.length()-3));
			if(s.startsWith(str.substring(str.length()-3))){
				select.add(s);
			}			
		}
		String max = str;
		for(String s  : select){
			String temp =  koof(str+s.substring(s.length()-1));
			if(max.length()<temp.length()){
				max=temp;
			}
			
		}		
		return max;
	}


看一下是否大连招.
public String koof(String str){
		List<String> select = new ArrayList<String>();
		if(str.endsWith("EOF")){
			return str;
		}
		for(String s : list){
			if(s.startsWith(str.substring(str.length()-3))){
				select.add(s);
			}			
		}
		String max = str;
		for(String s  : select){
			String nextKey = str+s.substring(s.length()-1);
			if(str.indexOf(s.substring(1))>=0){
				return str+"EOF";
			}
			String temp =  koof(nextKey);
			if(max.length()<temp.length()){
				max=temp;
			}
			
		}		
		return max;
	}
	@Test
	public final void testKoofFindNone() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABE");
		Assert.assertEquals("ABE", koof);
	}
	@Test
	public final void testKoofFindOne() {
		KOF kof = new KOF(Arrays.asList("ABCD"));
		String koof = kof.koof("ABC");
		Assert.assertEquals("ABCD", koof);
	}
	@Test
	public final void testKoofFindTwo() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDF", koof);
	}
	
	@Test
	public final void testKoofFindThree() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDE","CDEF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDEF", koof);
	}
	
	@Test
	public final void testKoofFindTree() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDF","BCDE","CDEF"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDEF", koof);
	}
	
	@Test
	public final void testKoofFindRound() {
		KOF kof = new KOF(Arrays.asList("ABCD","BCDA","CDAB","DABC"));
		String koof = kof.koof("ABCD");
		Assert.assertEquals("ABCDABEOF", koof);
	}
分享到:
评论
8 楼 抛出异常的爱 2010-11-26  
蔡华江 写道
挨批了,,我。。 
怎么来说呢,个人感觉这个题目并不是很难,当然实现起来另说了。

我以为这个代码还是好懂的,其是我只是认为文字的东西少了点,要是能直接给人思路就好了。(我是不是太啥了点)
所以我认为里面有四个字“最大路径”能抵上所有的junit测试了。。。

算法都还给老师了。。。

1.从列表中找到 以 XXX 结尾的所有选择
2. 结束条件
找到第一个可以使用的串
(当然原题 义不是这样的)
3.底归
找到所有可能性
4.选择最长路线
把所有可能性长度最大的那种保留下来
5.看一下是否大连招.
如果字串存在重复那么这个会一直循环下去.

每次变型都有简单的测试用例.
7 楼 蔡华江 2010-11-26  
挨批了,,我。。 
怎么来说呢,个人感觉这个题目并不是很难,当然实现起来另说了。

我以为这个代码还是好懂的,其是我只是认为文字的东西少了点,要是能直接给人思路就好了。(我是不是太啥了点)
所以我认为里面有四个字“最大路径”能抵上所有的junit测试了。。。

算法都还给老师了。。。
6 楼 抛出异常的爱 2010-11-26  
cupid04 写道
蔡华江 写道
楼主写的代码蛮好看的,就是说明太少了,看得累。。


某天,某程序员写了关于某个功能的代码,洋洋洒洒几千行,老板看到后说,小伙子,干得不错,这么短时间能够写出这么多代码。小伙子说,再给我一个月,我可以弄到几百行。老板脸黑了。。。
然后不久的一天,这个人被炒了....

代码不多.
就这么二十几行
想看直接看懂有点小难

但真的有心看
顺着我的例子抄一遍.
我想应该能看的懂.

说明真的一点都不少.....
楼上两人我不是真对你们俩.
public String koof(String str){  
        List<String> select = new ArrayList<String>();  
        if(str.endsWith("EOF")){  
            return str;  
        }  
        for(String s : list){  
            if(s.startsWith(str.substring(str.length()-3))){  
                select.add(s);  
            }             
        }  
        String max = str;  
        for(String s  : select){  
            String nextKey = str+s.substring(s.length()-1);  
            if(str.indexOf(s.substring(1))>=0){  
                return str+"EOF";  
            }  
            String temp =  koof(nextKey);  
            if(max.length()<temp.length()){  
                max=temp;  
            }  
              
        }         
        return max;  
    } 
 
5 楼 cupid04 2010-11-26  
蔡华江 写道
楼主写的代码蛮好看的,就是说明太少了,看得累。。


某天,某程序员写了关于某个功能的代码,洋洋洒洒几千行,老板看到后说,小伙子,干得不错,这么短时间能够写出这么多代码。小伙子说,再给我一个月,我可以弄到几百行。老板脸黑了。。。
然后不久的一天,这个人被炒了....
4 楼 leon_a 2010-10-11  
抛出异常的爱 写道
引用
问答题似乎题目都蛮长的。最后一道讲的是KOF哦。题目大概是:
玩过KOF(拳皇)的人都知道,玩的时候会连招是比较强的(polaris也玩过,不过不会连招,呵呵)。题目的大概意思是:每招用一个大写字母表 示,如ABC...Z,现给定n个连招公式:S→T,其中S长度为m,T的长度为1。在前m招的时候可以随便连,但m+1招后就必须遵循连招公式。现在要 写一个算法,计算最长连招的长度;如果可以无限连招,则返回def。1≤n,m≤100
给了一个例子:n=4,m=3,连招公式为:ABC→C,ABC→D,CCA→A,BCA→B(最后一个连招公式忘了,记在纸上落在住处了,晚上改 改,不过应该不影响理解)。连招公式的意思是:A、B、C可以连出C,也可连出D,C、C、A可以连出A,B、C、A、可以连出B。这时候可以得到最长连 招公式:ABC→C→A→A,即最长连招公式长度为6。
题目要求给出算法思想并结合一定的伪码。


代码真没多少.....
大多数看到的是测试.....

楼主的代码我看懂了。。。。我根据图论也写了一个
3 楼 leon_a 2010-10-11  
http://leon-a.iteye.com/blog/779558
2 楼 抛出异常的爱 2010-09-29  
引用
问答题似乎题目都蛮长的。最后一道讲的是KOF哦。题目大概是:
玩过KOF(拳皇)的人都知道,玩的时候会连招是比较强的(polaris也玩过,不过不会连招,呵呵)。题目的大概意思是:每招用一个大写字母表 示,如ABC...Z,现给定n个连招公式:S→T,其中S长度为m,T的长度为1。在前m招的时候可以随便连,但m+1招后就必须遵循连招公式。现在要 写一个算法,计算最长连招的长度;如果可以无限连招,则返回def。1≤n,m≤100
给了一个例子:n=4,m=3,连招公式为:ABC→C,ABC→D,CCA→A,BCA→B(最后一个连招公式忘了,记在纸上落在住处了,晚上改 改,不过应该不影响理解)。连招公式的意思是:A、B、C可以连出C,也可连出D,C、C、A可以连出A,B、C、A、可以连出B。这时候可以得到最长连 招公式:ABC→C→A→A,即最长连招公式长度为6。
题目要求给出算法思想并结合一定的伪码。


代码真没多少.....
大多数看到的是测试.....
1 楼 蔡华江 2010-09-29  
楼主写的代码蛮好看的,就是说明太少了,看得累。。

相关推荐

Global site tag (gtag.js) - Google Analytics