猜数字游戏

[quote]猜数字的游戏,很多人都玩过吧,规则是这样的:随机产生一个由4个不同数字串,如0257。玩家输入自己猜测的数字如:4567,此时系统将给出提示 1a1b,1a表示有猜中一个数字,且位置正确(7),1b表示猜中一个数字,且位置不正确,如此猜下去,直到所猜数字返回4a0b为止。

现在转换角色,让程序来玩这个游戏,用户输入10个不同的A-Z的字母,然后程序猜测这10个字母是什么样的排列组合,平台将告知程序xayb,让程序尽量用最少的次数解出答案。[/quote]

先作出一个出题机。
[code]package com.maodajun.javaeye2;

public class GuessNumber {
String primitive ="";
public GuessNumber(String primitive){
this.primitive=primitive;
}
public GuessNumber(){

List list = new ArrayList();
String primitive = "";
for(int i = 0 ; i < 26 ; i ++){
char tmp = (char) ('A'+i);
list.add( Character.toString(tmp));

}
int j =-1;
for(int i = 0 ; i <10 ; i++){
j =r.nextInt(list.size());
primitive+=list.remove(j);
}
this.primitive=primitive;


}

public String guessOne(String guessone){
if(primitive.equalsIgnoreCase(guessone) ){
return primitive.length()+"a"+0+"b";

}
char[] oldchars = primitive.toCharArray();
char[] guesschars = guessone.toCharArray();
int a = 0 ;
int b =0;
for(int i = 0 ; i < oldchars.length ||i < guesschars.length ; i++ ){
if(oldchars[i]==guesschars[i]){
oldchars [i ]= '0';
guesschars[i]='0';
a++;

}
}
for(int i = 0 ; i < oldchars.length ; i ++){

if(guessone.indexOf(oldchars[i])>0){
b++;
oldchars[i]='0';
}
}


return a+"a"+b+"b";
}

}
[/code]
测试 代码:
[code]package com.maodajun.javaeye2;

import junit.framework.TestCase;

public class GuessNumberTest extends TestCase {
public GuessNumber gn= null;
public static void main(String[] args) {
junit.textui.TestRunner.run(GuessNumberTest.class);
}

protected void setUp() throws Exception {
super.setUp();
}

protected void tearDown() throws Exception {
super.tearDown();
}

/*
* Test method for 'com.maodajun.javaeye2.GuessNumber.guessOne(String)'
*/
public void testGuessOne() {
gn = new GuessNumber("ABCD");
assertEquals("4a0b",gn.guessOne("ABCD"));
assertEquals("0a0b",gn.guessOne("EFGH"));
assertEquals("1a0b",gn.guessOne("AEFG"));
assertEquals("0a1b",gn.guessOne("EAFG"));

}

}
[/code]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值